boj_client/model/response.rs
1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5/// Shared response metadata returned by BOJ endpoints.
6#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
7pub struct ResponseMeta {
8 /// BOJ status code (`200`, `400`, `500`, `503`, ...).
9 pub status: u16,
10 /// BOJ message identifier.
11 pub message_id: String,
12 /// Human-readable BOJ message.
13 pub message: String,
14 /// Response date value provided by BOJ, when available.
15 pub date: Option<String>,
16}
17
18/// A single survey data point in a time series.
19#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
20pub struct DataPoint {
21 /// Survey date key (for example, year or period token from API payload).
22 pub survey_date: String,
23 /// Observed value at `survey_date`; `None` when BOJ omits the value.
24 pub value: Option<String>,
25}
26
27/// Echoed request parameters for `getDataCode`.
28#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
29pub struct CodeParameterEcho {
30 /// Echoed `format` parameter, if present in the response payload.
31 pub format: Option<String>,
32 /// Echoed `lang` parameter, if present in the response payload.
33 pub lang: Option<String>,
34 /// Echoed `db` parameter, if present in the response payload.
35 pub db: Option<String>,
36 /// Echoed `startDate` parameter, if present in the response payload.
37 pub start_date: Option<String>,
38 /// Echoed `endDate` parameter, if present in the response payload.
39 pub end_date: Option<String>,
40 /// Echoed `startPosition` parameter, if present in the response payload.
41 pub start_position: Option<u32>,
42 /// Additional parameter echoes not normalized into dedicated fields.
43 #[serde(default)]
44 pub extras: BTreeMap<String, String>,
45}
46
47/// Echoed request parameters for `getDataLayer`.
48#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
49pub struct LayerParameterEcho {
50 /// Echoed `format` parameter, if present in the response payload.
51 pub format: Option<String>,
52 /// Echoed `lang` parameter, if present in the response payload.
53 pub lang: Option<String>,
54 /// Echoed `db` parameter, if present in the response payload.
55 pub db: Option<String>,
56 /// Echoed `frequency` parameter, if present in the response payload.
57 pub frequency: Option<String>,
58 /// Echoed first layer index, if present in the response payload.
59 pub layer1: Option<u32>,
60 /// Echoed second layer index, if present in the response payload.
61 pub layer2: Option<u32>,
62 /// Echoed third layer index, if present in the response payload.
63 pub layer3: Option<u32>,
64 /// Echoed fourth layer index, if present in the response payload.
65 pub layer4: Option<u32>,
66 /// Echoed fifth layer index, if present in the response payload.
67 pub layer5: Option<u32>,
68 /// Echoed `startDate` parameter, if present in the response payload.
69 pub start_date: Option<String>,
70 /// Echoed `endDate` parameter, if present in the response payload.
71 pub end_date: Option<String>,
72 /// Echoed `startPosition` parameter, if present in the response payload.
73 pub start_position: Option<u32>,
74 /// Additional parameter echoes not normalized into dedicated fields.
75 #[serde(default)]
76 pub extras: BTreeMap<String, String>,
77}
78
79/// One time-series entry from `getDataCode`.
80#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
81pub struct CodeSeries {
82 /// Time-series code returned by BOJ.
83 pub series_code: String,
84 /// Japanese time-series name, when available for response language/format.
85 pub name_of_time_series_j: Option<String>,
86 /// English time-series name, when available for response language/format.
87 pub name_of_time_series: Option<String>,
88 /// Japanese unit label, when available for response language/format.
89 pub unit_j: Option<String>,
90 /// English unit label, when available for response language/format.
91 pub unit: Option<String>,
92 /// Frequency label reported by BOJ, when available.
93 pub frequency: Option<String>,
94 /// Japanese category label, when available for response language/format.
95 pub category_j: Option<String>,
96 /// English category label, when available for response language/format.
97 pub category: Option<String>,
98 /// Last update timestamp/text from BOJ, when available.
99 pub last_update: Option<String>,
100 /// Ordered data points in the series.
101 #[serde(default)]
102 pub points: Vec<DataPoint>,
103 /// Additional series fields not normalized into dedicated fields.
104 #[serde(default)]
105 pub extras: BTreeMap<String, Option<String>>,
106}
107
108/// One time-series entry from `getDataLayer`.
109#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
110pub struct LayerSeries {
111 /// Time-series code returned by BOJ.
112 pub series_code: String,
113 /// Japanese time-series name, when available for response language/format.
114 pub name_of_time_series_j: Option<String>,
115 /// English time-series name, when available for response language/format.
116 pub name_of_time_series: Option<String>,
117 /// Japanese unit label, when available for response language/format.
118 pub unit_j: Option<String>,
119 /// English unit label, when available for response language/format.
120 pub unit: Option<String>,
121 /// Frequency label reported by BOJ, when available.
122 pub frequency: Option<String>,
123 /// Japanese category label, when available for response language/format.
124 pub category_j: Option<String>,
125 /// English category label, when available for response language/format.
126 pub category: Option<String>,
127 /// Last update timestamp/text from BOJ, when available.
128 pub last_update: Option<String>,
129 /// Ordered data points in the series.
130 #[serde(default)]
131 pub points: Vec<DataPoint>,
132 /// Additional series fields not normalized into dedicated fields.
133 #[serde(default)]
134 pub extras: BTreeMap<String, Option<String>>,
135}
136
137/// One metadata entry from `getMetadata`.
138#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
139pub struct MetadataEntry {
140 /// Time-series code, when present for the metadata row.
141 pub series_code: Option<String>,
142 /// Japanese time-series name, when available for response language/format.
143 pub name_of_time_series_j: Option<String>,
144 /// English time-series name, when available for response language/format.
145 pub name_of_time_series: Option<String>,
146 /// Japanese unit label, when available for response language/format.
147 pub unit_j: Option<String>,
148 /// English unit label, when available for response language/format.
149 pub unit: Option<String>,
150 /// Frequency label reported by BOJ, when available.
151 pub frequency: Option<String>,
152 /// Japanese category label, when available for response language/format.
153 pub category_j: Option<String>,
154 /// English category label, when available for response language/format.
155 pub category: Option<String>,
156 /// First layer index, when present.
157 pub layer1: Option<u32>,
158 /// Second layer index, when present.
159 pub layer2: Option<u32>,
160 /// Third layer index, when present.
161 pub layer3: Option<u32>,
162 /// Fourth layer index, when present.
163 pub layer4: Option<u32>,
164 /// Fifth layer index, when present.
165 pub layer5: Option<u32>,
166 /// Start of the time series, when present.
167 pub start_of_the_time_series: Option<String>,
168 /// End of the time series, when present.
169 pub end_of_the_time_series: Option<String>,
170 /// Last update timestamp/text from BOJ, when available.
171 pub last_update: Option<String>,
172 /// Japanese notes, when available for response language/format.
173 pub notes_j: Option<String>,
174 /// English notes, when available for response language/format.
175 pub notes: Option<String>,
176 /// Additional metadata fields not normalized into dedicated fields.
177 #[serde(default)]
178 pub extras: BTreeMap<String, Option<String>>,
179}
180
181/// Decoded response model for `getDataCode`.
182#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
183pub struct CodeResponse {
184 /// Response metadata.
185 pub meta: ResponseMeta,
186 /// Echoed request parameters.
187 pub parameter: CodeParameterEcho,
188 /// Pagination cursor for subsequent calls, when available.
189 pub next_position: Option<u32>,
190 /// Returned series entries.
191 pub series: Vec<CodeSeries>,
192 /// Raw decoded text body preserved for diagnostics.
193 pub raw: String,
194}
195
196/// Decoded response model for `getDataLayer`.
197#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
198pub struct LayerResponse {
199 /// Response metadata.
200 pub meta: ResponseMeta,
201 /// Echoed request parameters.
202 pub parameter: LayerParameterEcho,
203 /// Pagination cursor for subsequent calls, when available.
204 pub next_position: Option<u32>,
205 /// Returned series entries.
206 pub series: Vec<LayerSeries>,
207 /// Raw decoded text body preserved for diagnostics.
208 pub raw: String,
209}
210
211/// Decoded response model for `getMetadata`.
212#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
213pub struct MetadataResponse {
214 /// Response metadata.
215 pub meta: ResponseMeta,
216 /// Database code corresponding to the metadata response.
217 pub db: String,
218 /// Returned metadata entries.
219 pub entries: Vec<MetadataEntry>,
220 /// Raw decoded text body preserved for diagnostics.
221 pub raw: String,
222}