1#![allow(dead_code)]
2#![allow(non_camel_case_types)]
3#![allow(non_snake_case)]
4use crate::types::{
5 ClassInfoItem, ClassRoomInfoItem, ElsTimetableItem, HisTimetableItem, MealServiceItem,
6 MisTimetableItem, SchoolAflcoInfoItem, SchoolInfoItem, SchoolMajorInfoItem, SchoolScheduleItem,
7 SpsTimetableItem,
8};
9use serde::Deserialize;
10
11use super::AcademyInfoItem;
12
13#[derive(Debug, Deserialize)]
14pub struct ResultCode {
15 CODE: String,
16 MESSAGE: String,
17}
18
19#[derive(Debug, Deserialize)]
20struct HeadFirst {
21 list_total_count: usize,
22}
23
24#[derive(Debug, Deserialize)]
25struct HeadSecond {
26 RESULT: ResultCode,
27}
28
29#[derive(Debug, Deserialize)]
30pub struct ResultHead {
31 head: (HeadFirst, HeadSecond), }
33
34impl ResultHead {
35 pub fn get_total_count(&self) -> usize {
36 self.head.0.list_total_count
37 }
38}
39
40#[derive(Debug, Deserialize)]
41pub struct ResultBody<T> {
42 pub row: Vec<T>,
43}
44
45#[derive(Debug, Deserialize)]
46pub enum ResponseBody {
47 #[serde(rename = "RESULT")]
48 Result(ResultCode),
49 schoolInfo((ResultHead, ResultBody<SchoolInfoItem>)), classInfo((ResultHead, ResultBody<ClassInfoItem>)), schoolMajorinfo((ResultHead, ResultBody<SchoolMajorInfoItem>)), schulAflcoinfo((ResultHead, ResultBody<SchoolAflcoInfoItem>)), SchoolSchedule((ResultHead, ResultBody<SchoolScheduleItem>)), elsTimetable((ResultHead, ResultBody<ElsTimetableItem>)), misTimetable((ResultHead, ResultBody<MisTimetableItem>)), hisTimetable((ResultHead, ResultBody<HisTimetableItem>)), spsTimetable((ResultHead, ResultBody<SpsTimetableItem>)), tiClrminfo((ResultHead, ResultBody<ClassRoomInfoItem>)), acaInsTiInfo((ResultHead, ResultBody<AcademyInfoItem>)), mealServiceDietInfo((ResultHead, ResultBody<MealServiceItem>)), }
62
63pub trait ExtractFromResponse {
64 fn extract_from_response(response: ResponseBody) -> (usize, Vec<Self>)
65 where
66 Self: Sized;
67}
68
69impl ExtractFromResponse for SchoolInfoItem {
70 fn extract_from_response(response: ResponseBody) -> (usize, Vec<Self>) {
71 if let ResponseBody::schoolInfo((head, data)) = response {
72 (head.get_total_count(), data.row)
73 } else {
74 Default::default()
75 }
76 }
77}
78
79impl ExtractFromResponse for ClassInfoItem {
80 fn extract_from_response(response: ResponseBody) -> (usize, Vec<Self>) {
81 if let ResponseBody::classInfo((head, data)) = response {
82 (head.get_total_count(), data.row)
83 } else {
84 Default::default()
85 }
86 }
87}
88
89impl ExtractFromResponse for SchoolMajorInfoItem {
90 fn extract_from_response(response: ResponseBody) -> (usize, Vec<Self>) {
91 if let ResponseBody::schoolMajorinfo((head, data)) = response {
92 (head.get_total_count(), data.row)
93 } else {
94 Default::default()
95 }
96 }
97}
98
99impl ExtractFromResponse for SchoolAflcoInfoItem {
100 fn extract_from_response(response: ResponseBody) -> (usize, Vec<Self>) {
101 if let ResponseBody::schulAflcoinfo((head, data)) = response {
102 (head.get_total_count(), data.row)
103 } else {
104 Default::default()
105 }
106 }
107}
108
109impl ExtractFromResponse for SchoolScheduleItem {
110 fn extract_from_response(response: ResponseBody) -> (usize, Vec<Self>) {
111 if let ResponseBody::SchoolSchedule((head, data)) = response {
112 (head.get_total_count(), data.row)
113 } else {
114 Default::default()
115 }
116 }
117}
118
119impl ExtractFromResponse for ElsTimetableItem {
120 fn extract_from_response(response: ResponseBody) -> (usize, Vec<Self>) {
121 if let ResponseBody::elsTimetable((head, data)) = response {
122 (head.get_total_count(), data.row)
123 } else {
124 Default::default()
125 }
126 }
127}
128
129impl ExtractFromResponse for MisTimetableItem {
130 fn extract_from_response(response: ResponseBody) -> (usize, Vec<Self>) {
131 if let ResponseBody::misTimetable((head, data)) = response {
132 (head.get_total_count(), data.row)
133 } else {
134 Default::default()
135 }
136 }
137}
138
139impl ExtractFromResponse for HisTimetableItem {
140 fn extract_from_response(response: ResponseBody) -> (usize, Vec<Self>) {
141 if let ResponseBody::hisTimetable((head, data)) = response {
142 (head.get_total_count(), data.row)
143 } else {
144 Default::default()
145 }
146 }
147}
148
149impl ExtractFromResponse for SpsTimetableItem {
150 fn extract_from_response(response: ResponseBody) -> (usize, Vec<Self>) {
151 if let ResponseBody::spsTimetable((head, data)) = response {
152 (head.get_total_count(), data.row)
153 } else {
154 Default::default()
155 }
156 }
157}
158
159impl ExtractFromResponse for ClassRoomInfoItem {
160 fn extract_from_response(response: ResponseBody) -> (usize, Vec<Self>) {
161 if let ResponseBody::tiClrminfo((head, data)) = response {
162 (head.get_total_count(), data.row)
163 } else {
164 Default::default()
165 }
166 }
167}
168
169impl ExtractFromResponse for AcademyInfoItem {
170 fn extract_from_response(response: ResponseBody) -> (usize, Vec<Self>) {
171 if let ResponseBody::acaInsTiInfo((head, data)) = response {
172 (head.get_total_count(), data.row)
173 } else {
174 Default::default()
175 }
176 }
177}
178
179impl ExtractFromResponse for MealServiceItem {
180 fn extract_from_response(response: ResponseBody) -> (usize, Vec<Self>) {
181 if let ResponseBody::mealServiceDietInfo((head, data)) = response {
182 (head.get_total_count(), data.row)
183 } else {
184 Default::default()
185 }
186 }
187}