use osal_rs_serde::{Serialize, Deserialize, to_bytes, from_bytes};
#[derive(Serialize, Deserialize, Debug, PartialEq)]
struct Location {
latitude: i32, longitude: i32, }
#[derive(Serialize, Deserialize, Debug, PartialEq)]
struct Device {
id: u32,
battery: u8,
location: Location,
active: bool,
}
#[derive(Serialize, Deserialize, Debug, PartialEq)]
struct Network {
network_id: u16,
devices: [Device; 3],
timestamp: u64,
}
fn main() {
println!("=== OSAL-RS-Serde Nested Structs Example ===\n");
let device = Device {
id: 42,
battery: 85,
location: Location {
latitude: 45500000, longitude: 9200000, },
active: true,
};
println!("Device: {:?}", device);
println!("Location: lat={:.6}°, lon={:.6}°",
device.location.latitude as f64 / 1_000_000.0,
device.location.longitude as f64 / 1_000_000.0);
let mut buffer = [0u8; 64];
let len = to_bytes(&device, &mut buffer).unwrap();
println!("Serialized {} bytes", len);
let decoded: Device = from_bytes(&buffer[..len]).unwrap();
println!("Decoded device: {:?}", decoded);
assert_eq!(device, decoded);
println!("\n=== Network with multiple devices ===");
let network = Network {
network_id: 100,
devices: [
Device {
id: 1,
battery: 95,
location: Location { latitude: 45500000, longitude: 9200000 },
active: true,
},
Device {
id: 2,
battery: 60,
location: Location { latitude: 45510000, longitude: 9210000 },
active: true,
},
Device {
id: 3,
battery: 30,
location: Location { latitude: 45490000, longitude: 9190000 },
active: false,
},
],
timestamp: 1642857600,
};
println!("Network ID: {}", network.network_id);
println!("Number of devices: {}", network.devices.len());
for (i, dev) in network.devices.iter().enumerate() {
println!(" Device {}: ID={}, Battery={}%, Active={}",
i + 1, dev.id, dev.battery, dev.active);
}
let mut large_buffer = [0u8; 256];
let len = to_bytes(&network, &mut large_buffer).unwrap();
println!("\nNetwork serialized: {} bytes", len);
let decoded: Network = from_bytes(&large_buffer[..len]).unwrap();
println!("Decoded network ID: {}", decoded.network_id);
assert_eq!(network, decoded);
println!("\n=== Example completed successfully! ===");
}