pub struct ExerciseSlideSubmissionInfo {
pub tasks: Vec<CourseMaterialExerciseTask>,
pub exercise: Exercise,
pub exercise_slide_submission: ExerciseSlideSubmission,
pub user_exercise_state: Option<UserExerciseState>,
}Fields§
§tasks: Vec<CourseMaterialExerciseTask>§exercise: Exercise§exercise_slide_submission: ExerciseSlideSubmission§user_exercise_state: Option<UserExerciseState>Implementations§
Source§impl ExerciseSlideSubmissionInfo
impl ExerciseSlideSubmissionInfo
Redacts fields that must never reach a holder of a share token, who has no teacher or course role. Unlike the role-gated paths, the shared view always hides:
- every task’s model solution spec, regardless of grading state — otherwise “submit → share → open my own link” is the cheapest path to a solution. (The course-material path reveals it once the student has full points or is out of tries.)
- the submitter’s
user_id, zeroed rather than removed so the wire shape stays the same for other consumers of this type. user_exercise_state, dropped whole rather than field by field: every one of its members is the submitter’s own progress (user_id,score_given,activity_progress,reviewing_stage), a share-link holder needs none of it, and nulling members individually would re-leak the moment one is added.- each task’s
pseudonumous_user_id, a stable per-service pseudonym that otherwise links all of one user’s shares to each other.
Trait Implementations§
Source§impl Clone for ExerciseSlideSubmissionInfo
impl Clone for ExerciseSlideSubmissionInfo
Source§fn clone(&self) -> ExerciseSlideSubmissionInfo
fn clone(&self) -> ExerciseSlideSubmissionInfo
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl ComposeSchema for ExerciseSlideSubmissionInfo
impl ComposeSchema for ExerciseSlideSubmissionInfo
Source§impl Debug for ExerciseSlideSubmissionInfo
impl Debug for ExerciseSlideSubmissionInfo
Source§impl<'de> Deserialize<'de> for ExerciseSlideSubmissionInfo
impl<'de> Deserialize<'de> for ExerciseSlideSubmissionInfo
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>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl ToSchema for ExerciseSlideSubmissionInfo
impl ToSchema for ExerciseSlideSubmissionInfo
impl StructuralPartialEq for ExerciseSlideSubmissionInfo
Auto Trait Implementations§
impl Freeze for ExerciseSlideSubmissionInfo
impl RefUnwindSafe for ExerciseSlideSubmissionInfo
impl Send for ExerciseSlideSubmissionInfo
impl Sync for ExerciseSlideSubmissionInfo
impl Unpin for ExerciseSlideSubmissionInfo
impl UnsafeUnpin for ExerciseSlideSubmissionInfo
impl UnwindSafe for ExerciseSlideSubmissionInfo
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
Mutably borrows from an owned value. Read more
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> ⓘ
Converts
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> ⓘ
Converts
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>
Wrap the input message
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>,
Applies the layer to a service and wraps it in [
Layered].§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§impl<T> ServiceExt for T
impl<T> ServiceExt for T
§fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>where
Self: Sized,
fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>where
Self: Sized,
Apply a transformation to the response body. Read more
§fn decompression(self) -> Decompression<Self>where
Self: Sized,
fn decompression(self) -> Decompression<Self>where
Self: Sized,
Decompress response bodies. Read more
§fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>where
Self: Sized,
fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>where
Self: Sized,
High level tracing that classifies responses using HTTP status codes. Read more
§fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>where
Self: Sized,
fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>where
Self: Sized,
High level tracing that classifies responses using gRPC headers. Read more