#[repr(C)] pub struct PowerSocket { power_rate: f32, on: bool, } #[unsafe(no_mangle)] pub extern "C" fn power_socket_new(power_rate: f32, on: bool) -> PowerSocket { PowerSocket { power_rate, on } } #[unsafe(no_mangle)] pub extern "C" fn power_socket_is_on(power_socket: &PowerSocket) -> bool { power_socket.on } #[unsafe(no_mangle)] pub extern "C" fn power_socket_set_on(power_socket: &mut PowerSocket, on: bool) { power_socket.on = on } #[unsafe(no_mangle)] pub extern "C" fn power_socket_get_power(power_socket: &PowerSocket) -> f32 { if power_socket.on { power_socket.power_rate } else { 0.0 } } #[cfg(test)] mod tests { use super::*; #[test] fn it_works() { let mut power_socket = power_socket_new(12.0, false); assert_eq!(power_socket.power_rate, 12.0); assert_eq!(power_socket.on, false); assert_eq!(power_socket_is_on(&power_socket), false); assert_eq!(power_socket_get_power(&power_socket), 0.0); power_socket_set_on(&mut power_socket, true); assert_eq!(power_socket_is_on(&power_socket), true); assert_eq!(power_socket_get_power(&power_socket), 12.0); } }