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