use serde::{Deserialize, Serialize};
use uuid::Uuid;
#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename = "qti-assessment-item")]
pub struct AssessmentItem {
#[serde(rename = "@identifier")]
pub identifier: String,
#[serde(rename = "@title")]
pub title: String,
#[serde(rename = "@adaptive")]
pub adaptive: bool,
#[serde(rename = "@time-dependent")]
pub time_dependent: bool,
#[serde(rename = "qti-response-declaration")]
pub response_declaration: Vec<ResponseDeclaration>,
#[serde(rename = "qti-outcome-declaration")]
pub outcome_declaration: OutcomeDeclaration,
#[serde(rename = "qti-item-body")]
pub item_body: ItemBody,
#[serde(rename = "qti-response-processing")]
pub response_processing: Option<ResponseProcessing>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct ResponseDeclaration {
#[serde(rename = "@identifier")]
pub identifier: String,
#[serde(rename = "@cardinality")]
pub cardinality: String,
#[serde(rename = "@base-type")]
pub base_type: String,
#[serde(rename = "qti-correct-response")]
pub correct_response: Option<CorrectResponse>,
#[serde(rename = "qti-mapping")]
pub mapping: Option<Mapping>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct CorrectResponse {
#[serde(rename = "qti-value")]
pub value: Vec<QtiValue>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct QtiValue {
#[serde(rename = "$value")]
pub content: String,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Mapping {
#[serde(rename = "@lower-bound")]
pub lower_bound: Option<f32>,
#[serde(rename = "@upper-bound")]
pub upper_bound: Option<f32>,
#[serde(rename = "@default-value")]
pub default_value: Option<f32>,
#[serde(rename = "qti-map-entry")]
pub map_entry: Vec<MapEntry>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct MapEntry {
#[serde(rename = "@map-key")]
pub map_key: String,
#[serde(rename = "@mapped-value")]
pub mapped_value: f32,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct OutcomeDeclaration {
#[serde(rename = "@identifier")]
pub identifier: String,
#[serde(rename = "@cardinality")]
pub cardinality: String,
#[serde(rename = "@base-type")]
pub base_type: String,
#[serde(rename = "qti-default-value")]
pub default_value: Option<DefaultValue>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct DefaultValue {
#[serde(rename = "qti-value")]
pub value: QtiValue,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct ItemBody {
#[serde(rename = "$value")]
pub content: Option<String>,
#[serde(rename = "qti-choice-interaction")]
pub choice_interaction: Option<Vec<ChoiceInteraction>>,
#[serde(rename = "qti-gap-match-interaction")]
pub gap_interaction: Option<Vec<GapInteraction>>,
#[serde(rename = "qti-graphic-gap-match-interaction")]
pub graphic_gap_match_interaction: Option<Vec<GraphicGapMatchInteraction>>,
#[serde(rename = "qti-hotspot-interaction")]
pub hotspot_interaction: Option<Vec<HotspotInteraction>>,
#[serde(rename = "qti-hottext-interaction")]
pub hottext_interaction: Option<Vec<HottextInteraction>>,
#[serde(rename = "qti-match-interaction")]
pub match_interaction: Option<Vec<MatchInteraction>>,
#[serde(rename = "qti-inline-choice-interaction")]
pub inline_choice_interaction : Option<Vec<InlineChoiceInteraction>>,
#[serde(rename = "qti-text-entry-interaction")]
pub text_entry_interaction : Option<Vec<TextEntryInteraction>>,
#[serde(rename = "qti-extended-text-interaction")]
pub extended_text_interaction : Option<Vec<ExtendedTextInteraction>>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct ChoiceInteraction {
#[serde(rename = "@response-identifier")]
pub response_identifier: String,
#[serde(rename = "@shuffle")]
pub shuffle: Option<String>,
#[serde(rename = "@max-choices")]
pub max_choices: f32,
#[serde(rename = "qti-prompt")]
pub prompt: Prompt,
#[serde(rename = "qti-simple-choice")]
pub simple_choice: Vec<SimpleChoice>,
#[serde(rename = "$value")]
pub content: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct GapInteraction {
#[serde(rename = "@response-identifier")]
pub response_identifier: String,
#[serde(rename = "@class")]
pub class: Option<String>,
#[serde(rename = "@data-choices-container-width")]
pub data_choices_container_width: Option<f32>,
#[serde(rename = "qti-prompt")]
pub prompt: Prompt,
#[serde(rename = "qti-gap-text")]
pub gap_text: Vec<GapText>,
#[serde(rename = "qti-gap")]
pub gap: Vec<Gap>,
#[serde(rename = "$value")]
pub content: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
enum AnyName {
#[serde(other)]
Text
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct GapText {
#[serde(rename = "@identifier")]
pub identifier: String,
#[serde(rename = "@match-max")]
pub match_max: f32,
#[serde(rename = "$value")]
pub content: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Gap {
#[serde(rename = "@uid")]
pub uid: Uuid,
#[serde(rename = "@identifier")]
pub identifier: String,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct GraphicGapMatchInteraction
{
#[serde(rename = "qti-prompt")]
pub prompt: Option<Prompt>,
#[serde(rename = "@response-identifier")]
pub response_identifier: String,
#[serde(rename = "data-choices-container-width")]
pub data_choices_container_width: Option<f32>,
#[serde(rename = "qti-gap-img")]
pub gap_img: Vec<GapImg>,
#[serde(rename = "qti-associable-hotspot")]
pub associable_hotspot: Vec<AssociableHotspot>,
#[serde(rename = "$value")]
pub content: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct GapImg {
#[serde(rename = "@identifier")]
pub identifier: String,
#[serde(rename = "@match-max")]
pub match_max: f32,
#[serde(rename = "$value")]
pub content: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct AssociableHotspot {
#[serde(rename = "@uid")]
pub uid: Uuid,
#[serde(rename = "@coords")]
pub coords: String,
#[serde(rename = "@identifier")]
pub identifier: String,
#[serde(rename = "@match-max")]
pub match_max: f32,
#[serde(rename = "@shape")]
pub shape: String,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct HotspotInteraction {
#[serde(rename = "qti-prompt")]
pub prompt: Option<Prompt>,
#[serde(rename = "@class")]
pub class: Option<String>,
#[serde(rename = "@max-choices")]
pub max_choices: f32,
#[serde(rename = "@response-identifier")]
pub response_identifier: String,
#[serde(rename = "qti-hotspot-choice")]
pub hotspot_choice: Vec<HotspotChoice>,
#[serde(rename = "$value")]
pub content: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct HotspotChoice {
#[serde(rename = "@coords")]
pub coords: String,
#[serde(rename = "@identifier")]
pub identifier: String,
#[serde(rename = "@shape")]
pub shape: String,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct HottextInteraction {
#[serde(rename = "@class")]
pub class: Option<String>,
#[serde(rename = "@max-choices")]
pub max_choices: f32,
#[serde(rename = "@response-identifier")]
pub response_identifier: String,
#[serde(rename = "qti-prompt")]
pub prompt: Option<Prompt>,
#[serde(rename = "qti-hottext")]
pub hottext: Vec<Hottext>,
#[serde(rename = "$value")]
pub content: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Hottext {
#[serde(rename = "@identifier")]
pub identifier: String,
#[serde(rename = "$value")]
pub content: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct MatchInteraction {
#[serde(rename = "qti-prompt")]
pub prompt: Option<Prompt>,
#[serde(rename = "@max-associations")]
pub max_associations: f32,
#[serde(rename = "@response-identifier")]
pub response_identifier: String,
#[serde(rename = "@shuffle")]
pub shuffle: Option<String>,
#[serde(rename = "qti-simple-match-set")]
pub simple_match_set: Vec<SimpleMatchSet>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct SimpleMatchSet {
#[serde(rename = "qti-simple-associable-choice")]
pub simple_associable_choice: Vec<SimpleAssociableChoice>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct SimpleAssociableChoice {
#[serde(rename = "@uid")]
pub uid: Uuid,
#[serde(rename = "@identifier")]
pub identifier: String,
#[serde(rename = "@match-max")]
pub match_max: f32,
#[serde(rename = "@id")]
pub id: Option<String>,
#[serde(rename = "@aria-label")]
pub aria_label: String,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct InlineChoiceInteraction {
#[serde(rename = "qti-prompt")]
pub prompt: Option<Prompt>,
#[serde(rename = "@class")]
pub class: Option<String>,
#[serde(rename = "@response-identifier")]
pub response_identifier: String,
#[serde(rename = "@shuffle")]
pub shuffle: Option<String>,
#[serde(rename = "qti-inline-choice")]
pub inline_choice : Vec<InlineChoice>,
#[serde(rename = "$value")]
pub content: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct InlineChoice {
#[serde(rename = "@identifier")]
pub identifier: String,
#[serde(rename = "$value")]
pub content: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct TextEntryInteraction {
#[serde(rename = "qti-prompt")]
pub prompt: Option<Prompt>,
#[serde(rename = "@class")]
pub class: Option<String>,
#[serde(rename = "@response-identifier")]
pub response_identifier: String,
#[serde(rename = "@shuffle")]
pub shuffle: Option<String>,
#[serde(rename = "@expected-length")]
pub expected_length : i32,
#[serde(rename = "@pattern-mask")]
pub pattern_mask : Option<String>,
#[serde(rename = "@data-patternmask-message")]
pub data_patternmask_message : Option<String>
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct ExtendedTextInteraction {
#[serde(rename = "@class")]
pub class: Option<String>,
#[serde(rename = "@response-identifier")]
pub response_identifier: String,
#[serde(rename = "@shuffle")]
pub shuffle: Option<String>,
#[serde(rename = "@expected-length")]
pub expected_length : i32,
#[serde(rename = "@format")]
pub format : Option<String>,
pub pattern_mask : Option<String>,
#[serde(rename = "@data-patternmask-message")]
pub data_patternmask_message : Option<String>,
#[serde(rename = "qti-prompt")]
pub prompt: Option<Prompt>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Prompt {
#[serde(rename = "$value")]
pub content: Option<String>,
#[serde(rename = "@id")]
pub id: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct SimpleChoice {
#[serde(rename = "@identifier")]
pub identifier: String,
#[serde(rename = "@fixed")]
pub fixed: Option<bool>,
#[serde(rename = "$value")]
pub content: String,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct ResponseProcessing {
#[serde(rename = "@template")]
pub template: Option<String>,
#[serde(rename = "qti-response-condition")]
pub response_condition: Option<ResponseCondition>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct ResponseCondition {
#[serde(rename = "qti-response-if")]
pub response_if: ResponseIf,
#[serde(rename = "qti-response-else")]
pub response_else: ResponseElse,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct ResponseIf {
#[serde(rename = "qti-is-null")]
pub is_null: IsNull,
#[serde(rename = "qti-set-outcome-value")]
pub set_outcome_value: SetOutcomeValue,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct IsNull {
#[serde(rename = "qti-variable")]
pub variable: Variable,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct Variable {
#[serde(rename = "@identifier")]
pub identifier: String,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct SetOutcomeValue {
#[serde(rename = "@identifier")]
pub identifier: String,
#[serde(rename = "qti-map-response")]
pub map_response : Option<MapResponse>,
#[serde(rename = "qti-base-value")]
pub base_value : Option<BaseValue>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct MapResponse {
#[serde(rename = "@identifier")]
pub identifier: String,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct BaseValue {
#[serde(rename = "@base-type")]
pub base_type : String,
#[serde(rename = "$value")]
pub content: String,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct ResponseElse {
#[serde(rename = "qti-set-outcome-value")]
pub set_outcome_value: SetOutcomeValue,
}