hoist_core/resources/
synonym_map.rs1use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6use super::traits::{Resource, ResourceKind};
7
8#[derive(Debug, Clone, Serialize, Deserialize)]
10#[serde(rename_all = "camelCase")]
11pub struct SynonymMap {
12 pub name: String,
13 pub format: String,
14 pub synonyms: String,
15 #[serde(skip_serializing_if = "Option::is_none")]
16 pub encryption_key: Option<Value>,
17 #[serde(flatten)]
18 pub extra: std::collections::HashMap<String, Value>,
19}
20
21impl Resource for SynonymMap {
22 fn kind() -> ResourceKind {
23 ResourceKind::SynonymMap
24 }
25
26 fn name(&self) -> &str {
27 &self.name
28 }
29}
30
31#[cfg(test)]
32mod tests {
33 use super::*;
34 use serde_json::json;
35
36 #[test]
37 fn test_synonym_map_kind() {
38 assert_eq!(SynonymMap::kind(), ResourceKind::SynonymMap);
39 }
40
41 #[test]
42 fn test_synonym_map_default_volatile_fields() {
43 let fields = SynonymMap::volatile_fields();
44 assert_eq!(fields, &["@odata.etag", "@odata.context"]);
45 }
46
47 #[test]
48 fn test_synonym_map_identity_key() {
49 assert_eq!(SynonymMap::identity_key(), "name");
50 }
51
52 #[test]
53 fn test_synonym_map_deserialize() {
54 let val = json!({
55 "name": "my-synonyms",
56 "format": "solr",
57 "synonyms": "USA, United States, United States of America\nWashington, Wash. => WA"
58 });
59 let sm: SynonymMap = serde_json::from_value(val).unwrap();
60 assert_eq!(sm.name, "my-synonyms");
61 assert_eq!(sm.format, "solr");
62 assert!(sm.synonyms.contains("USA"));
63 assert!(sm.encryption_key.is_none());
64 }
65
66 #[test]
67 fn test_synonym_map_roundtrip() {
68 let val = json!({
69 "name": "roundtrip-map",
70 "format": "solr",
71 "synonyms": "fast, quick, speedy"
72 });
73 let sm: SynonymMap = serde_json::from_value(val).unwrap();
74 let serialized = serde_json::to_string(&sm).unwrap();
75 let deserialized: SynonymMap = serde_json::from_str(&serialized).unwrap();
76 assert_eq!(deserialized.name, "roundtrip-map");
77 assert_eq!(deserialized.format, "solr");
78 assert_eq!(deserialized.synonyms, "fast, quick, speedy");
79 }
80}