use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct Beacon {
#[serde(rename = "proximityUUID")]
pub proximity_uuid: String,
#[serde(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub major: Option<u16>,
#[serde(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub minor: Option<u16>,
#[serde(default)]
#[serde(skip_serializing_if = "Option::is_none")]
pub relevant_text: Option<String>,
}
impl Default for Beacon {
fn default() -> Self {
Self {
proximity_uuid: String::from("00000000-0000-0000-0000-000000000000"),
major: None,
minor: None,
relevant_text: None,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn make_beacon() {
let beacon = Beacon {
proximity_uuid: String::from("e286373b-15b5-4f4e-bf91-e9e64787724a"),
major: Some(2),
minor: Some(150),
relevant_text: Some(String::from("The simple beacon")),
};
let json = serde_json::to_string_pretty(&beacon).unwrap();
println!("{json}");
let json_expected = r#"{
"proximityUUID": "e286373b-15b5-4f4e-bf91-e9e64787724a",
"major": 2,
"minor": 150,
"relevantText": "The simple beacon"
}"#;
assert_eq!(json_expected, json);
let beacon: Beacon = serde_json::from_str(json_expected).unwrap();
let json = serde_json::to_string_pretty(&beacon).unwrap();
assert_eq!(json_expected, json);
}
}