Files
rust-otus/smart-house/power_socket_lib/src/lib.rs
2026-04-27 23:02:53 +03:00

46 lines
1.2 KiB
Rust

#[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);
}
}