neis_client/types/
school_schedule.rs1#![allow(non_snake_case)]
2use super::ToQueryString;
3use super::deserialize_i32_from_string;
4use form_urlencoded::Serializer;
5use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, Serialize)]
8pub struct SchoolScheduleParams {
9 pub ATPT_OFCDC_SC_CODE: String,
11 pub SD_SCHUL_CODE: String,
13 pub DGHT_CRSE_SC_NM: Option<String>,
15 pub SCHUL_CRSE_SC_NM: Option<String>,
17 pub AA_YMD: Option<String>,
19 pub AA_FROM_YMD: Option<String>,
21 pub AA_TO_YMD: Option<String>,
23}
24
25impl SchoolScheduleParams {
26 pub fn new(atpt_ofcdc_sc_code: &str, sd_schul_code: &str) -> Self {
27 Self {
28 ATPT_OFCDC_SC_CODE: atpt_ofcdc_sc_code.to_owned(),
29 SD_SCHUL_CODE: sd_schul_code.to_owned(),
30 DGHT_CRSE_SC_NM: None,
31 SCHUL_CRSE_SC_NM: None,
32 AA_YMD: None,
33 AA_FROM_YMD: None,
34 AA_TO_YMD: None,
35 }
36 }
37
38 pub fn ymd(mut self, year: i32, month: u8, day: u8) -> Self {
39 self.AA_YMD = Some(format!("{:04}{:02}{:02}", year, month, day));
40 self
41 }
42 pub fn from_ymd(mut self, year: i32, month: u8, day: u8) -> Self {
43 self.AA_FROM_YMD = Some(format!("{:04}{:02}{:02}", year, month, day));
44 self
45 }
46 pub fn to_ymd(mut self, year: i32, month: u8, day: u8) -> Self {
47 self.AA_TO_YMD = Some(format!("{:04}{:02}{:02}", year, month, day));
48 self
49 }
50}
51
52impl ToQueryString for SchoolScheduleParams {
53 fn to_query_string(&self) -> String {
54 let mut serializer = Serializer::new(String::new());
55
56 serializer.append_pair("ATPT_OFCDC_SC_CODE", &self.ATPT_OFCDC_SC_CODE);
57 serializer.append_pair("SD_SCHUL_CODE", &self.SD_SCHUL_CODE);
58 if let Some(s) = &self.DGHT_CRSE_SC_NM {
59 serializer.append_pair("DGHT_CRSE_SC_NM", s);
60 }
61 if let Some(s) = &self.SCHUL_CRSE_SC_NM {
62 serializer.append_pair("SCHUL_CRSE_SC_NM", s);
63 }
64 if let Some(s) = &self.AA_YMD {
65 serializer.append_pair("AA_YMD", s);
66 }
67 if let Some(s) = &self.AA_FROM_YMD {
68 serializer.append_pair("AA_FROM_YMD", s);
69 }
70 if let Some(s) = &self.AA_TO_YMD {
71 serializer.append_pair("AA_TO_YMD", s);
72 }
73
74 serializer.finish()
75 }
76}
77
78#[derive(Debug, Clone, Deserialize, Hash)]
79pub struct SchoolScheduleItem {
80 pub ATPT_OFCDC_SC_CODE: String,
83
84 pub ATPT_OFCDC_SC_NM: String,
87
88 pub SD_SCHUL_CODE: String,
91
92 pub SCHUL_NM: String,
95
96 #[serde(deserialize_with = "deserialize_i32_from_string")]
99 pub AY: i32,
100
101 pub DGHT_CRSE_SC_NM: Option<String>,
104
105 pub SCHUL_CRSE_SC_NM: Option<String>,
108
109 pub SBTR_DD_SC_NM: Option<String>,
112
113 pub AA_YMD: String,
116
117 pub EVENT_NM: String,
120
121 pub EVENT_CNTNT: String,
124
125 pub ONE_GRADE_EVENT_YN: String,
128 pub TW_GRADE_EVENT_YN: String,
131 pub THREE_GRADE_EVENT_YN: String,
134 pub FR_GRADE_EVENT_YN: String,
137 pub FIV_GRADE_EVENT_YN: String,
140 pub SIX_GRADE_EVENT_YN: String,
143
144 pub LOAD_DTM: String,
147}
148
149impl SchoolScheduleItem {
150 pub fn is_event_for_grade(&self, grade: u8) -> bool {
151 match grade {
152 1 => self.ONE_GRADE_EVENT_YN == "Y",
153 2 => self.TW_GRADE_EVENT_YN == "Y",
154 3 => self.THREE_GRADE_EVENT_YN == "Y",
155 4 => self.FR_GRADE_EVENT_YN == "Y",
156 5 => self.FIV_GRADE_EVENT_YN == "Y",
157 6 => self.SIX_GRADE_EVENT_YN == "Y",
158 _ => false,
159 }
160 }
161}