bo4e_core/com/
cadastral_address.rs1use serde::{Deserialize, Serialize};
4
5use crate::traits::{Bo4eMeta, Bo4eObject};
6
7#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
25#[cfg_attr(feature = "json-schema", derive(schemars::JsonSchema))]
26#[cfg_attr(feature = "json-schema", schemars(rename = "Katasteradresse"))]
27#[serde(rename_all = "camelCase")]
28pub struct CadastralAddress {
29 #[serde(flatten)]
31 pub meta: Bo4eMeta,
32
33 #[serde(skip_serializing_if = "Option::is_none")]
35 #[cfg_attr(feature = "json-schema", schemars(rename = "gemarkungFlur"))]
36 pub gemarkung_flur: Option<String>,
37
38 #[serde(skip_serializing_if = "Option::is_none")]
40 #[cfg_attr(feature = "json-schema", schemars(rename = "flurstueck"))]
41 pub flurstueck: Option<String>,
42}
43
44impl Bo4eObject for CadastralAddress {
45 fn type_name_german() -> &'static str {
46 "Katasteradresse"
47 }
48
49 fn type_name_english() -> &'static str {
50 "CadastralAddress"
51 }
52
53 fn meta(&self) -> &Bo4eMeta {
54 &self.meta
55 }
56
57 fn meta_mut(&mut self) -> &mut Bo4eMeta {
58 &mut self.meta
59 }
60}
61
62#[cfg(test)]
63mod tests {
64 use super::*;
65
66 #[test]
67 fn test_cadastral_address_default() {
68 let addr = CadastralAddress::default();
69 assert!(addr.gemarkung_flur.is_none());
70 assert!(addr.flurstueck.is_none());
71 }
72
73 #[test]
74 fn test_cadastral_address_serialize() {
75 let addr = CadastralAddress {
76 gemarkung_flur: Some("Gemarkung Musterstadt, Flur 3".to_string()),
77 flurstueck: Some("123/4".to_string()),
78 ..Default::default()
79 };
80
81 let json = serde_json::to_string(&addr).unwrap();
82 assert!(json.contains(r#""gemarkungFlur":"#));
83 assert!(json.contains(r#""flurstueck":"123/4""#));
84 }
85
86 #[test]
87 fn test_cadastral_address_roundtrip() {
88 let addr = CadastralAddress {
89 meta: Bo4eMeta::with_type("Katasteradresse"),
90 gemarkung_flur: Some("Flur 5".to_string()),
91 flurstueck: Some("789/10".to_string()),
92 };
93
94 let json = serde_json::to_string(&addr).unwrap();
95 let parsed: CadastralAddress = serde_json::from_str(&json).unwrap();
96 assert_eq!(addr, parsed);
97 }
98
99 #[test]
100 fn test_bo4e_object_impl() {
101 assert_eq!(CadastralAddress::type_name_german(), "Katasteradresse");
102 assert_eq!(CadastralAddress::type_name_english(), "CadastralAddress");
103 }
104}