From 1e66729e5959bc33729be69c22e5942810ac65fc Mon Sep 17 00:00:00 2001 From: Samuel Lorch Date: Mon, 29 Jul 2024 23:49:50 +0200 Subject: [PATCH] add system power api --- src/api/system/power.rs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/api/system/power.rs diff --git a/src/api/system/power.rs b/src/api/system/power.rs new file mode 100644 index 0000000..ad14ab7 --- /dev/null +++ b/src/api/system/power.rs @@ -0,0 +1,27 @@ +use crate::api::ApiError; +use crate::state::RpcState; +use jsonrpsee::types::Params; +use jsonrpsee::RpcModule; +use std::sync::Arc; + +pub fn register_methods(module: &mut RpcModule) { + module + .register_async_method("system.power.shutdown", halt_system) + .unwrap(); + + module + .register_async_method("system.power.restart", reboot_system) + .unwrap(); +} + +pub async fn halt_system<'a>(_: Params<'a>, _state: Arc) -> Result<(), ApiError> { + let systemd_manager = zbus_systemd::systemd1::ManagerProxy::new(&_state.dbus_conn).await?; + systemd_manager.halt().await?; + Ok(()) +} + +pub async fn reboot_system<'a>(_: Params<'a>, _state: Arc) -> Result<(), ApiError> { + let systemd_manager = zbus_systemd::systemd1::ManagerProxy::new(&_state.dbus_conn).await?; + systemd_manager.reboot().await?; + Ok(()) +}