1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
use serde::{Deserialize, Serialize};
use yaserde_derive::{YaDeserialize, YaSerialize};
use crate::ResourceReference;
#[derive(Debug, Serialize, Deserialize, YaSerialize, YaDeserialize, PartialEq, Clone, Default)]
#[yaserde(
rename = "account",
prefix = "gx",
default_namespace = "gx",
namespace = "gx: http://gedcomx.org/v1/"
)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct OnlineAccount {
#[yaserde(rename = "serviceHomepage", prefix = "gx")]
pub service_homepage: ResourceReference,
#[yaserde(rename = "accountName", prefix = "gx")]
pub account_name: String,
}
impl OnlineAccount {
pub fn new<I, J>(service_homepage: I, account_name: J) -> Self
where
I: Into<ResourceReference>,
J: Into<String>,
{
Self {
service_homepage: service_homepage.into(),
account_name: account_name.into(),
}
}
}
#[cfg(test)]
mod test {
use yaserde::ser::Config;
use super::*;
#[test]
fn json_deserialize() {
let json = r#"{
"serviceHomepage" : {
"resource" : "http://familysearch.org/"
},
"accountName" : "Family Search Account"
}"#;
let online_account: OnlineAccount = serde_json::from_str(json).unwrap();
assert_eq!(
online_account,
OnlineAccount {
service_homepage: ResourceReference::from("http://familysearch.org/"),
account_name: "Family Search Account".to_string(),
}
)
}
#[test]
fn json_serialize() {
let online_account = OnlineAccount {
service_homepage: ResourceReference::from("http://familysearch.org/"),
account_name: "Family Search Account".to_string(),
};
let json = serde_json::to_string(&online_account).unwrap();
assert_eq!(
json,
r#"{"serviceHomepage":{"resource":"http://familysearch.org/"},"accountName":"Family Search Account"}"#
)
}
#[test]
fn xml_deserialize() {
let xml = r#"<account><serviceHomepage resource="http://familysearch.org/"/>
<accountName>Family Search Account</accountName></account>"#;
let online_account: OnlineAccount = yaserde::de::from_str(xml).unwrap();
assert_eq!(
online_account,
OnlineAccount {
service_homepage: ResourceReference::from("http://familysearch.org/"),
account_name: "Family Search Account".to_string(),
}
)
}
#[test]
fn xml_serialize() {
let online_account = OnlineAccount {
service_homepage: ResourceReference::from("http://familysearch.org/"),
account_name: "Family Search Account".to_string(),
};
let mut config = Config::default();
config.write_document_declaration = false;
let xml = yaserde::ser::to_string_with_config(&online_account, &config).unwrap();
assert_eq!(
xml,
r#"<account xmlns="http://gedcomx.org/v1/"><serviceHomepage resource="http://familysearch.org/" /><accountName>Family Search Account</accountName></account>"#
)
}
}