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