neis_client/types/
his_timetable.rs1#![allow(non_snake_case)]
2use super::ToQueryString;
3use super::{deserialize_i32_from_string, deserialize_u8_from_string};
4use form_urlencoded::Serializer;
5use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, Serialize)]
8pub struct HisTimetableParams {
9 pub ATPT_OFCDC_SC_CODE: String,
11 pub SD_SCHUL_CODE: String,
13 pub AY: Option<String>,
15 pub SEM: Option<String>,
17 pub ALL_TI_YMD: Option<String>,
19 pub DGHT_CRSE_SC_NM: Option<String>,
21 pub ORD_SC_NM: Option<String>,
23 pub DDDEP_NM: Option<String>,
25 pub GRADE: Option<String>,
27 pub CLRM_NM: Option<String>,
29 pub CLASS_NM: Option<String>,
31 pub TI_FROM_YMD: Option<String>,
33 pub TI_TO_YMD: Option<String>,
35}
36
37impl HisTimetableParams {
38 pub fn new(atpt_ofcdc_sc_code: &str, sd_schul_code: &str) -> Self {
39 Self {
40 ATPT_OFCDC_SC_CODE: atpt_ofcdc_sc_code.to_owned(),
41 SD_SCHUL_CODE: sd_schul_code.to_owned(),
42 AY: None,
43 SEM: None,
44 ALL_TI_YMD: None,
45 DGHT_CRSE_SC_NM: None,
46 ORD_SC_NM: None,
47 DDDEP_NM: None,
48 GRADE: None,
49 CLRM_NM: None,
50 CLASS_NM: None,
51 TI_FROM_YMD: None,
52 TI_TO_YMD: None,
53 }
54 }
55
56 pub fn ay(mut self, year: i32) -> Self {
57 self.AY = Some(year.to_string());
58 self
59 }
60 pub fn sem(mut self, sem: u8) -> Self {
61 self.SEM = Some(sem.to_string());
62 self
63 }
64 pub fn ymd(mut self, year: i32, month: u8, day: u8) -> Self {
65 self.ALL_TI_YMD = Some(format!("{:04}{:02}{:02}", year, month, day));
66 self
67 }
68 pub fn grade(mut self, grade: u8) -> Self {
69 self.GRADE = Some(grade.to_string());
70 self
71 }
72 pub fn from_ymd(mut self, year: i32, month: u8, day: u8) -> Self {
73 self.TI_FROM_YMD = Some(format!("{:04}{:02}{:02}", year, month, day));
74 self
75 }
76 pub fn to_ymd(mut self, year: i32, month: u8, day: u8) -> Self {
77 self.TI_TO_YMD = Some(format!("{:04}{:02}{:02}", year, month, day));
78 self
79 }
80}
81
82impl ToQueryString for HisTimetableParams {
83 fn to_query_string(&self) -> String {
84 let mut serializer = Serializer::new(String::new());
85
86 serializer.append_pair("ATPT_OFCDC_SC_CODE", &self.ATPT_OFCDC_SC_CODE);
87 serializer.append_pair("SD_SCHUL_CODE", &self.SD_SCHUL_CODE);
88 if let Some(s) = &self.AY {
89 serializer.append_pair("AY", s);
90 }
91 if let Some(s) = &self.SEM {
92 serializer.append_pair("SEM", s);
93 }
94 if let Some(s) = &self.ALL_TI_YMD {
95 serializer.append_pair("ALL_TI_YMD", s);
96 }
97 if let Some(s) = &self.DGHT_CRSE_SC_NM {
98 serializer.append_pair("DGHT_CRSE_SC_NM", s);
99 }
100 if let Some(s) = &self.ORD_SC_NM {
101 serializer.append_pair("ORD_SC_NM", s);
102 }
103 if let Some(s) = &self.DDDEP_NM {
104 serializer.append_pair("DDDEP_NM", s);
105 }
106 if let Some(s) = &self.GRADE {
107 serializer.append_pair("GRADE", s);
108 }
109 if let Some(s) = &self.CLRM_NM {
110 serializer.append_pair("CLRM_NM", s);
111 }
112 if let Some(s) = &self.CLASS_NM {
113 serializer.append_pair("CLASS_NM", s);
114 }
115 if let Some(s) = &self.TI_FROM_YMD {
116 serializer.append_pair("TI_FROM_YMD", s);
117 }
118 if let Some(s) = &self.TI_TO_YMD {
119 serializer.append_pair("TI_TO_YMD", s);
120 }
121
122 serializer.finish()
123 }
124}
125
126#[derive(Debug, Clone, Deserialize, Hash)]
127pub struct HisTimetableItem {
128 pub ATPT_OFCDC_SC_CODE: String,
131
132 pub ATPT_OFCDC_SC_NM: String,
135
136 pub SD_SCHUL_CODE: String,
139
140 pub SCHUL_NM: String,
143
144 #[serde(deserialize_with = "deserialize_i32_from_string")]
147 pub AY: i32,
148
149 #[serde(deserialize_with = "deserialize_u8_from_string")]
152 pub SEM: u8,
153
154 pub ALL_TI_YMD: String,
157
158 pub DGHT_CRSE_SC_NM: Option<String>,
161
162 pub ORD_SC_NM: Option<String>,
165
166 pub DDDEP_NM: Option<String>,
169
170 #[serde(deserialize_with = "deserialize_u8_from_string")]
173 pub GRADE: u8,
174
175 pub CLRM_NM: Option<String>,
178
179 pub CLASS_NM: Option<String>,
182
183 #[serde(deserialize_with = "deserialize_u8_from_string")]
186 pub PERIO: u8,
187
188 pub ITRT_CNTNT: Option<String>,
191
192 pub LOAD_DTM: String,
195}