odict/format/json/
etymology.rs1use std::collections::HashMap;
2
3use serde::Serialize;
4
5use crate::{Etymology, PartOfSpeech};
6
7use super::{ordered_map, SenseJSON};
8
9#[derive(Serialize)]
10pub struct EtymologyJSON {
11 #[serde(skip_serializing_if = "Option::is_none")]
12 pub id: Option<String>,
13
14 #[serde(skip_serializing_if = "Option::is_none")]
15 pub pronunciation: Option<String>,
16
17 #[serde(skip_serializing_if = "Option::is_none")]
18 pub description: Option<String>,
19
20 #[serde(
21 serialize_with = "ordered_map",
22 skip_serializing_if = "HashMap::is_empty"
23 )]
24 pub senses: HashMap<PartOfSpeech, SenseJSON>,
25}
26
27impl From<Etymology> for EtymologyJSON {
28 fn from(entry: Etymology) -> Self {
29 let Etymology {
30 id,
31 pronunciation,
32 description,
33 senses,
34 } = entry;
35
36 Self {
37 id,
38 pronunciation,
39 description,
40 senses: senses
41 .into_iter()
42 .map(|(k, v)| (k, SenseJSON::from(v)))
43 .collect(),
44 }
45 }
46}