1use serde_derive::Deserialize;
2use serde_derive::Serialize;
3use serde_json::Value;
4
5#[derive(Default, Deserialize, Serialize, Clone, Debug)]
6pub struct Institutions {
7 pub id: u32,
8 pub names: Vec<Name>,
9 pub code: String,
10 #[serde(rename = "prefers2016LegacyReport")]
11 pub prefers_legacy_report: bool,
12 #[serde(rename = "isCommunityCollege")]
13 pub is_cc: bool,
14 pub category: u32,
15 #[serde(rename = "termType")]
16 pub term_type: u32,
17 #[serde(rename = "beginId")]
18 pub begin_id: u32,
19 #[serde(rename = "termTypeAcademicYears")]
20 pub term_type_academic_years: Vec<TermTuple>
21}
22
23#[derive(Default, Deserialize, Serialize, Clone, Debug)]
24pub struct Institution {
25 pub id: u32,
26 pub code: String,
27 #[serde(rename = "isCommunityCollege")]
28 pub is_cc: bool,
29 pub category: String,
30 #[serde(rename = "termType")]
31 pub term_type: String,
32 pub names: Vec<Name>,
33 #[serde(rename = "termTypeAcademicYears")]
34 pub term_type_academic_years: Vec<TermHistory>,
35 #[serde(rename = "beginId")]
36 pub begin_id: u32,
37 pub end_id: Option<u32>,
38}
39
40#[derive(Default, Deserialize, Serialize, Clone, Debug)]
41#[serde(rename_all = "camelCase")]
42pub struct TermHistory {
43 pub term_type: String,
44 pub from_year: u32
45}
46
47#[derive(Default, Debug, Clone, Deserialize, Serialize)]
48pub struct InstitutionCourseAgreement {
49 pub receiving_institution: Institution,
50 pub sending_institution: Institution,
51 pub courses: Vec<Articulation>,
52}
53
54#[derive(Deserialize, Serialize, Clone, Debug)]
55pub struct Name {
56 pub name: String,
57 #[serde(rename = "fromYear")]
58 pub from_year: Option<u32>,
59 #[serde(rename = "hasDepartments")]
60 pub has_departments: bool,
61 #[serde(rename = "hideInList")]
62 pub hide_in_list: bool,
63}
64
65#[derive(Deserialize, Serialize, Clone, Debug)]
66pub struct TermTuple {
67 #[serde(rename = "termType")]
68 pub term_type: u32,
69 #[serde(rename = "fromYear")]
70 pub from_year: u32,
71}
72
73#[derive(Deserialize, Serialize, Clone, Debug)]
74pub struct AcademicYear {
75 #[serde(rename = "Id")]
76 pub id: u32,
77 #[serde(rename = "FallYear")]
78 pub fall_year: u32,
79}
80
81#[derive(Deserialize, Serialize, Clone, Debug)]
82pub struct Agreement {
83 #[serde(rename = "institutionParentId")]
84 pub institution_parent_id: u32,
85 #[serde(rename = "institutionName")]
86 pub institution_name: String,
87 pub code: String,
88 #[serde(rename = "isCommunityCollege")]
89 pub is_cc: bool,
90 #[serde(rename = "sendingYearIds")]
91 pub sending_year_ids: Vec<u32>,
92 #[serde(rename = "receivingYearIds")]
93 pub receiving_year_ids: Vec<u32>,
94}
95
96#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
97#[serde(rename_all = "camelCase")]
98pub struct AllPrefix {
99 pub name: String,
100 pub articulations: Vec<Articulation>,
101}
102
103#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
104#[serde(rename_all = "camelCase")]
105pub struct AllDepartment {
106 pub name: String,
107 pub articulations: Vec<Articulation>,
108}
109
110#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
111#[serde(rename_all = "camelCase")]
112pub struct AllMajor {
113 pub template_cell_id: String,
114 pub articulation: Articulation,
115 pub receiving_attributes: Option<ReceivingAttributes>,
116}
117
118#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
119#[serde(rename_all = "camelCase")]
120pub struct Articulation {
121 #[serde(rename = "type")]
122 pub type_field: String,
123 pub course: Option<Course>,
124 #[serde(default)]
125 pub visible_cross_listed_courses: Option<Vec<Course>>,
126 #[serde(default)]
127 pub course_attributes: Option<Vec<Value>>,
128 pub sending_articulation: Option<SendingArticulation>,
129 #[serde(default)]
130 pub template_overrides: Option<Vec<Value>>,
131 #[serde(default)]
132 pub attributes: Option<Vec<Value>>,
133 #[serde(default)]
134 pub receiving_attributes: Option<Vec<Value>>,
135 pub requirement: Option<Requirement>,
136 #[serde(default)]
137 pub requirement_attributes: Option<Vec<Value>>,
138 pub series: Option<Series>,
139 #[serde(default)]
140 pub series_attributes: Option<Vec<Value>>,
141 pub general_education_area: Option<GeneralEducationArea>,
142 #[serde(default)]
143 pub general_education_area_attributes: Option<Vec<Value>>,
144}
145
146#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
147#[serde(rename_all = "camelCase")]
148pub struct Course {
149 #[serde(default)]
150 pub id: String,
151 #[serde(default)]
152 pub position: i64,
153 #[serde(default)]
154 pub published_course_identifier_year_term_id: Option<i64>,
155 #[serde(default)]
156 pub denied_on: Option<String>,
157 #[serde(default)]
158 pub attributes: Option<Vec<Value>>,
159 pub course_identifier_parent_id: i64,
160 pub course_title: Option<String>,
161 pub course_number: Option<String>,
162 pub prefix: Option<String>,
163 pub prefix_parent_id: Option<i64>,
164 pub prefix_description: Option<String>,
165 pub department_parent_id: Option<i64>,
166 pub department: Option<String>,
167 pub begin: Option<String>,
168 pub end: Option<String>,
169 pub min_units: Option<f32>,
170 pub max_units: Option<f32>,
171 pub pathways: Option<Value>,
172}
173
174#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
175#[serde(rename_all = "camelCase")]
176pub struct SendingArticulation {
177 pub no_articulation_reason: Option<String>,
178 pub denied_courses: Option<Vec<Course>>,
179 #[serde(default)]
180 pub items: Vec<Item>,
181 pub course_group_conjunctions: Option<Vec<CourseGroupConjunction>>,
182 #[serde(rename = "type")]
183 pub type_field: String,
184 pub attributes: Option<Vec<Value>>,
185}
186
187#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
188#[serde(rename_all = "camelCase")]
189pub struct Item {
190 #[serde(default)]
191 pub course_conjunction: String,
192 #[serde(default)]
193 pub items: Vec<Item2>,
194 pub attributes: Option<Vec<Value>>,
195 pub position: i64,
196 #[serde(rename = "type")]
197 pub type_field: String,
198}
199
200#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
201#[serde(rename_all = "camelCase")]
202pub struct Item2 {
203 pub visible_cross_listed_courses: Option<Vec<Course>>,
204 pub requisites: Option<Vec<Value>>,
205 pub attributes: Option<Vec<Attribute>>,
206 pub course_identifier_parent_id: i64,
207 pub course_title: Option<String>,
208 pub course_number: Option<String>,
209 pub prefix: Option<String>,
210 pub prefix_parent_id: Option<i64>,
211 pub prefix_description: Option<String>,
212 pub department_parent_id: Option<i64>,
213 pub department: Option<String>,
214 pub begin: Option<String>,
215 pub end: Option<String>,
216 pub min_units: Option<f32>,
217 pub max_units: Option<f32>,
218 #[serde(default)]
219 pub pathways: Option<Vec<Value>>,
220 pub published_course_identifier_year_term_id: Option<i64>,
221 pub position: i64,
222 #[serde(rename = "type")]
223 pub type_field: String,
224}
225
226#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
227#[serde(rename_all = "camelCase")]
228pub struct Attribute {
229 pub position: i64,
230 pub content: String,
231}
232
233#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
234#[serde(rename_all = "camelCase")]
235pub struct CourseGroupConjunction {
236 pub id: String,
237 pub sending_articulation_id: String,
238 pub group_conjunction: String,
239 pub sending_course_group_begin_position: i64,
240 pub sending_course_group_end_position: i64,
241}
242
243#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
244#[serde(rename_all = "camelCase")]
245pub struct Series {
246 pub conjunction: String,
247 pub name: String,
248 pub courses: Vec<Course>,
249 pub series_pathways: Option<Value>,
250}
251
252#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
253#[serde(rename_all = "camelCase")]
254pub struct Requirement {
255 pub name: String,
256}
257
258#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
259#[serde(rename_all = "camelCase")]
260pub struct GeneralEducationArea {
261 pub code: String,
262 pub name: String,
263 pub courses: Vec<Value>,
264}
265
266#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
267#[serde(rename_all = "camelCase")]
268pub struct ReceivingAttributes {
269 #[serde(rename = "type")]
270 pub type_field: String,
271 #[serde(default)]
272 pub course_attributes: Option<Vec<Value>>,
273 pub attributes: Option<Vec<Value>>,
274 #[serde(default)]
275 pub requirement_attributes: Option<Vec<Value>>,
276 #[serde(default)]
277 pub series_attributes: Option<Vec<Value>>,
278 #[serde(default)]
279 pub series_course_attributes: Option<Vec<Value>>,
280 #[serde(default)]
281 pub general_education_area_attributes: Option<Vec<Value>>,
282}