46 lines
1.2 KiB
Rust
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);
|
|
}
|
|
}
|