use serde_derive::Deserialize;
use serde_derive::Serialize;
use serde_json::Value;
#[derive(Default, Deserialize, Serialize, Clone, Debug)]
pub struct Institutions {
pub id: u32,
pub names: Vec<Name>,
pub code: String,
#[serde(rename = "prefers2016LegacyReport")]
pub prefers_legacy_report: bool,
#[serde(rename = "isCommunityCollege")]
pub is_cc: bool,
pub category: u32,
#[serde(rename = "termType")]
pub term_type: u32,
#[serde(rename = "beginId")]
pub begin_id: u32,
#[serde(rename = "termTypeAcademicYears")]
pub term_type_academic_years: Vec<TermTuple>
}
#[derive(Default, Deserialize, Serialize, Clone, Debug)]
pub struct Institution {
pub id: u32,
pub code: String,
#[serde(rename = "isCommunityCollege")]
pub is_cc: bool,
pub category: String,
#[serde(rename = "termType")]
pub term_type: String,
pub names: Vec<Name>,
#[serde(rename = "termTypeAcademicYears")]
pub term_type_academic_years: Vec<TermHistory>,
#[serde(rename = "beginId")]
pub begin_id: u32,
pub end_id: Option<u32>,
}
#[derive(Default, Deserialize, Serialize, Clone, Debug)]
#[serde(rename_all = "camelCase")]
pub struct TermHistory {
pub term_type: String,
pub from_year: u32
}
#[derive(Default, Debug, Clone, Deserialize, Serialize)]
pub struct InstitutionCourseAgreement {
pub receiving_institution: Institution,
pub sending_institution: Institution,
pub courses: Vec<Articulation>,
}
#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct Name {
pub name: String,
#[serde(rename = "fromYear")]
pub from_year: Option<u32>,
#[serde(rename = "hasDepartments")]
pub has_departments: bool,
#[serde(rename = "hideInList")]
pub hide_in_list: bool,
}
#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct TermTuple {
#[serde(rename = "termType")]
pub term_type: u32,
#[serde(rename = "fromYear")]
pub from_year: u32,
}
#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct AcademicYear {
#[serde(rename = "Id")]
pub id: u32,
#[serde(rename = "FallYear")]
pub fall_year: u32,
}
#[derive(Deserialize, Serialize, Clone, Debug)]
pub struct Agreement {
#[serde(rename = "institutionParentId")]
pub institution_parent_id: u32,
#[serde(rename = "institutionName")]
pub institution_name: String,
pub code: String,
#[serde(rename = "isCommunityCollege")]
pub is_cc: bool,
#[serde(rename = "sendingYearIds")]
pub sending_year_ids: Vec<u32>,
#[serde(rename = "receivingYearIds")]
pub receiving_year_ids: Vec<u32>,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AllPrefix {
pub name: String,
pub articulations: Vec<Articulation>,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AllDepartment {
pub name: String,
pub articulations: Vec<Articulation>,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AllMajor {
pub template_cell_id: String,
pub articulation: Articulation,
pub receiving_attributes: Option<ReceivingAttributes>,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Articulation {
#[serde(rename = "type")]
pub type_field: String,
pub course: Option<Course>,
#[serde(default)]
pub visible_cross_listed_courses: Option<Vec<Course>>,
#[serde(default)]
pub course_attributes: Option<Vec<Value>>,
pub sending_articulation: Option<SendingArticulation>,
#[serde(default)]
pub template_overrides: Option<Vec<Value>>,
#[serde(default)]
pub attributes: Option<Vec<Value>>,
#[serde(default)]
pub receiving_attributes: Option<Vec<Value>>,
pub requirement: Option<Requirement>,
#[serde(default)]
pub requirement_attributes: Option<Vec<Value>>,
pub series: Option<Series>,
#[serde(default)]
pub series_attributes: Option<Vec<Value>>,
pub general_education_area: Option<GeneralEducationArea>,
#[serde(default)]
pub general_education_area_attributes: Option<Vec<Value>>,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Course {
#[serde(default)]
pub id: String,
#[serde(default)]
pub position: i64,
#[serde(default)]
pub published_course_identifier_year_term_id: Option<i64>,
#[serde(default)]
pub denied_on: Option<String>,
#[serde(default)]
pub attributes: Option<Vec<Value>>,
pub course_identifier_parent_id: i64,
pub course_title: Option<String>,
pub course_number: Option<String>,
pub prefix: Option<String>,
pub prefix_parent_id: Option<i64>,
pub prefix_description: Option<String>,
pub department_parent_id: Option<i64>,
pub department: Option<String>,
pub begin: Option<String>,
pub end: Option<String>,
pub min_units: Option<f32>,
pub max_units: Option<f32>,
pub pathways: Option<Value>,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SendingArticulation {
pub no_articulation_reason: Option<String>,
pub denied_courses: Option<Vec<Course>>,
#[serde(default)]
pub items: Vec<Item>,
pub course_group_conjunctions: Option<Vec<CourseGroupConjunction>>,
#[serde(rename = "type")]
pub type_field: String,
pub attributes: Option<Vec<Value>>,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Item {
#[serde(default)]
pub course_conjunction: String,
#[serde(default)]
pub items: Vec<Item2>,
pub attributes: Option<Vec<Value>>,
pub position: i64,
#[serde(rename = "type")]
pub type_field: String,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Item2 {
pub visible_cross_listed_courses: Option<Vec<Course>>,
pub requisites: Option<Vec<Value>>,
pub attributes: Option<Vec<Attribute>>,
pub course_identifier_parent_id: i64,
pub course_title: Option<String>,
pub course_number: Option<String>,
pub prefix: Option<String>,
pub prefix_parent_id: Option<i64>,
pub prefix_description: Option<String>,
pub department_parent_id: Option<i64>,
pub department: Option<String>,
pub begin: Option<String>,
pub end: Option<String>,
pub min_units: Option<f32>,
pub max_units: Option<f32>,
#[serde(default)]
pub pathways: Option<Vec<Value>>,
pub published_course_identifier_year_term_id: Option<i64>,
pub position: i64,
#[serde(rename = "type")]
pub type_field: String,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Attribute {
pub position: i64,
pub content: String,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CourseGroupConjunction {
pub id: String,
pub sending_articulation_id: String,
pub group_conjunction: String,
pub sending_course_group_begin_position: i64,
pub sending_course_group_end_position: i64,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Series {
pub conjunction: String,
pub name: String,
pub courses: Vec<Course>,
pub series_pathways: Option<Value>,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Requirement {
pub name: String,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GeneralEducationArea {
pub code: String,
pub name: String,
pub courses: Vec<Value>,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ReceivingAttributes {
#[serde(rename = "type")]
pub type_field: String,
#[serde(default)]
pub course_attributes: Option<Vec<Value>>,
pub attributes: Option<Vec<Value>>,
#[serde(default)]
pub requirement_attributes: Option<Vec<Value>>,
#[serde(default)]
pub series_attributes: Option<Vec<Value>>,
#[serde(default)]
pub series_course_attributes: Option<Vec<Value>>,
#[serde(default)]
pub general_education_area_attributes: Option<Vec<Value>>,
}