Skip to main content

neis_client/types/
mis_timetable.rs

1#![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 MisTimetableParams {
9    /// 시도교육청코드
10    pub ATPT_OFCDC_SC_CODE: String,
11    /// 행정표준코드
12    pub SD_SCHUL_CODE: String,
13    /// 학년도
14    pub AY: Option<String>,
15    /// 학기
16    pub SEM: Option<String>,
17    /// 시간표일자
18    pub ALL_TI_YMD: Option<String>,
19    /// 주야과정명
20    pub DGHT_CRSE_SC_NM: Option<String>,
21    /// 학년
22    pub GRADE: Option<String>,
23    /// 학급명
24    pub CLASS_NM: Option<String>,
25    /// 교시
26    pub PERIO: Option<String>,
27    /// 시간표시작일자
28    pub TI_FROM_YMD: Option<String>,
29    /// 시간표종료일자
30    pub TI_TO_YMD: Option<String>,
31}
32
33impl MisTimetableParams {
34    pub fn new(atpt_ofcdc_sc_code: &str, sd_schul_code: &str) -> Self {
35        Self {
36            ATPT_OFCDC_SC_CODE: atpt_ofcdc_sc_code.to_owned(),
37            SD_SCHUL_CODE: sd_schul_code.to_owned(),
38            AY: None,
39            SEM: None,
40            ALL_TI_YMD: None,
41            DGHT_CRSE_SC_NM: None,
42            GRADE: None,
43            CLASS_NM: None,
44            PERIO: None,
45            TI_FROM_YMD: None,
46            TI_TO_YMD: None,
47        }
48    }
49
50    pub fn ay(mut self, year: i32) -> Self {
51        self.AY = Some(year.to_string());
52        self
53    }
54    pub fn sem(mut self, sem: u8) -> Self {
55        self.SEM = Some(sem.to_string());
56        self
57    }
58    pub fn ymd(mut self, year: i32, month: u8, day: u8) -> Self {
59        self.ALL_TI_YMD = Some(format!("{:04}{:02}{:02}", year, month, day));
60        self
61    }
62    pub fn grade(mut self, grade: u8) -> Self {
63        self.GRADE = Some(grade.to_string());
64        self
65    }
66    pub fn perio(mut self, perio: u8) -> Self {
67        self.PERIO = Some(perio.to_string());
68        self
69    }
70    pub fn from_ymd(mut self, year: i32, month: u8, day: u8) -> Self {
71        self.TI_FROM_YMD = Some(format!("{:04}{:02}{:02}", year, month, day));
72        self
73    }
74    pub fn to_ymd(mut self, year: i32, month: u8, day: u8) -> Self {
75        self.TI_TO_YMD = Some(format!("{:04}{:02}{:02}", year, month, day));
76        self
77    }
78}
79
80impl ToQueryString for MisTimetableParams {
81    fn to_query_string(&self) -> String {
82        let mut serializer = Serializer::new(String::new());
83
84        serializer.append_pair("ATPT_OFCDC_SC_CODE", &self.ATPT_OFCDC_SC_CODE);
85        serializer.append_pair("SD_SCHUL_CODE", &self.SD_SCHUL_CODE);
86        if let Some(s) = &self.AY {
87            serializer.append_pair("AY", s);
88        }
89        if let Some(s) = &self.SEM {
90            serializer.append_pair("SEM", s);
91        }
92        if let Some(s) = &self.ALL_TI_YMD {
93            serializer.append_pair("ALL_TI_YMD", s);
94        }
95        if let Some(s) = &self.DGHT_CRSE_SC_NM {
96            serializer.append_pair("DGHT_CRSE_SC_NM", s);
97        }
98        if let Some(s) = &self.GRADE {
99            serializer.append_pair("GRADE", s);
100        }
101        if let Some(s) = &self.CLASS_NM {
102            serializer.append_pair("CLASS_NM", s);
103        }
104        if let Some(s) = &self.PERIO {
105            serializer.append_pair("PERIO", s);
106        }
107        if let Some(s) = &self.TI_FROM_YMD {
108            serializer.append_pair("TI_FROM_YMD", s);
109        }
110        if let Some(s) = &self.TI_TO_YMD {
111            serializer.append_pair("TI_TO_YMD", s);
112        }
113
114        serializer.finish()
115    }
116}
117
118#[derive(Debug, Clone, Deserialize, Hash)]
119pub struct MisTimetableItem {
120    /// 시도교육청코드
121    /// B10 | C10 | D10 | E10 | F10 | G10 | H10 | I10 | J10 | K10 | M10 | N10 | P10 | Q10 | R10 | S10 | T10 | V10
122    pub ATPT_OFCDC_SC_CODE: String,
123
124    /// 시도교육청명
125    /// Example: 서울특별시교육청
126    pub ATPT_OFCDC_SC_NM: String,
127
128    /// 행정표준코드
129    /// Example: 7130177
130    pub SD_SCHUL_CODE: String,
131
132    /// 학교명
133    /// Example: 문현중학교
134    pub SCHUL_NM: String,
135
136    /// 학년도
137    /// Example: 2023
138    #[serde(deserialize_with = "deserialize_i32_from_string")]
139    pub AY: i32,
140
141    /// 학기
142    /// Example: 2
143    #[serde(deserialize_with = "deserialize_u8_from_string")]
144    pub SEM: u8,
145
146    /// 시간표일자
147    /// Example: 20230821
148    pub ALL_TI_YMD: String,
149
150    /// 주야과정명
151    /// Example: 주간
152    pub DGHT_CRSE_SC_NM: Option<String>,
153
154    /// 학년
155    /// Example: 3
156    #[serde(deserialize_with = "deserialize_u8_from_string")]
157    pub GRADE: u8,
158
159    /// 학급명
160    /// Example: 1
161    pub CLASS_NM: Option<String>,
162
163    /// 교시
164    /// Example: 1
165    #[serde(deserialize_with = "deserialize_u8_from_string")]
166    pub PERIO: u8,
167
168    /// 수업내용
169    /// Example: 생활 중국어
170    pub ITRT_CNTNT: Option<String>,
171
172    /// 수정일자
173    /// Example: 20230827
174    pub LOAD_DTM: String,
175}