headless_lms_server/domain/langs/
convert.rs

1//! Contains the Convert trait for converting between langs API types and headless-lms types.
2
3use headless_lms_models::{
4    course_instances::CourseInstanceWithCourseInfo, exercise_tasks::CourseMaterialExerciseTask,
5    exercises::GradingProgress,
6};
7use mooc_langs_api as api;
8
9pub trait Convert<T> {
10    fn convert(self) -> T;
11}
12
13impl<T, U> Convert<Vec<T>> for Vec<U>
14where
15    U: Convert<T>,
16{
17    fn convert(self) -> Vec<T> {
18        self.into_iter().map(Convert::convert).collect()
19    }
20}
21
22impl Convert<api::CourseInstance> for CourseInstanceWithCourseInfo {
23    fn convert(self) -> api::CourseInstance {
24        api::CourseInstance {
25            course_id: self.course_id,
26            course_slug: self.course_slug,
27            course_name: self.course_name,
28            course_description: self.course_description,
29            id: self.course_instance_id,
30            instance_name: self.course_instance_name,
31            instance_description: self.course_instance_description,
32        }
33    }
34}
35
36impl Convert<api::ExerciseTask> for CourseMaterialExerciseTask {
37    fn convert(self) -> api::ExerciseTask {
38        api::ExerciseTask {
39            task_id: self.id,
40            order_number: self.order_number,
41            assignment: self.assignment,
42            public_spec: self.public_spec,
43            model_solution_spec: self.model_solution_spec,
44            exercise_service_slug: self.exercise_service_slug,
45        }
46    }
47}
48
49impl Convert<api::GradingProgress> for GradingProgress {
50    fn convert(self) -> api::GradingProgress {
51        match self {
52            Self::Failed => api::GradingProgress::Failed,
53            Self::NotReady => api::GradingProgress::NotReady,
54            Self::PendingManual => api::GradingProgress::PendingManual,
55            Self::Pending => api::GradingProgress::Pending,
56            Self::FullyGraded => api::GradingProgress::FullyGraded,
57        }
58    }
59}