pub struct CourseModuleInfo {
pub id: Uuid,
pub name: Option<String>,
pub order_number: i32,
pub first_submission_at: Option<DateTime<Utc>>,
pub exercise_count: i32,
pub daily_submissions: Vec<DailySubmissionCount>,
pub ects_credits: Option<f32>,
pub uh_course_code: Option<String>,
pub enable_credit_registration_via_suotar: bool,
}Expand description
Slim module descriptor so the frontend can label per-module completions and show “X of Y modules”
without a separate course-structure fetch. Default (base) module has name = None.
Fields§
§id: Uuid§name: Option<String>§order_number: i32§first_submission_at: Option<DateTime<Utc>>Earliest exercise submission by this user in this module. No module “start” is stored, so the
frontend uses this to infer when an additional module was first worked on. None if untouched.
exercise_count: i32Number of non-deleted exercises in this module. Submission density is divided by this so courses
of very different size stay comparable. 0 if the module has no chapter-bound exercises.
daily_submissions: Vec<DailySubmissionCount>This user’s exercise submissions in this module bucketed by UTC day, ascending. Empty if none.
ects_credits: Option<f32>ECTS credits the module is worth. None when the module grants no credits.
uh_course_code: Option<String>The module’s course code in the university’s registry, e.g. BSCS1001.
enable_credit_registration_via_suotar: boolTrait Implementations§
Source§impl Clone for CourseModuleInfo
impl Clone for CourseModuleInfo
Source§fn clone(&self) -> CourseModuleInfo
fn clone(&self) -> CourseModuleInfo
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl ComposeSchema for CourseModuleInfo
impl ComposeSchema for CourseModuleInfo
Source§impl Debug for CourseModuleInfo
impl Debug for CourseModuleInfo
Source§impl<'de> Deserialize<'de> for CourseModuleInfo
impl<'de> Deserialize<'de> for CourseModuleInfo
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl PartialEq for CourseModuleInfo
impl PartialEq for CourseModuleInfo
Source§impl Serialize for CourseModuleInfo
impl Serialize for CourseModuleInfo
Source§impl ToSchema for CourseModuleInfo
impl ToSchema for CourseModuleInfo
impl StructuralPartialEq for CourseModuleInfo
Auto Trait Implementations§
impl Freeze for CourseModuleInfo
impl RefUnwindSafe for CourseModuleInfo
impl Send for CourseModuleInfo
impl Sync for CourseModuleInfo
impl Unpin for CourseModuleInfo
impl UnsafeUnpin for CourseModuleInfo
impl UnwindSafe for CourseModuleInfo
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
§fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Layered].