cleanup + added test script to demonstrate functioality + removed uncessary ping module

This commit is contained in:
Maxime Van Hees
2025-07-15 16:10:35 +02:00
parent 5e8e9754b2
commit b4200a2673
7 changed files with 148 additions and 119 deletions

View File

@@ -1,5 +1,4 @@
use crate::hetzner_api::{HetznerClient, WrappedServer};
use std::net::IpAddr;
use std::sync::mpsc::{Receiver, Sender};
use tokio::runtime::Builder;

View File

@@ -2,7 +2,6 @@ mod error;
mod hetzner_api;
mod rhai_api;
mod async_handler;
mod ping;
use crate::rhai_api::register_hetzner_api;
use rhai::{Engine, Scope};

View File

View File

@@ -41,38 +41,35 @@ pub fn register_hetzner_api(
return Err("HETZNER_API_TOKEN cannot be empty.".into());
}
Ok(HetznerClient::new(api_token))
})
.register_fn("list_servers", {
let bridge = api_bridge.clone();
move |client: &mut HetznerClient| {
bridge.call(Request::ListServers(client.clone()), |response| match response {
Response::ListServers(result) => result.map_err(|e| e.into()),
_ => Err("Unexpected response".into()),
})
}
})
.register_fn("get_server_status", {
let bridge = api_bridge.clone();
move |client: &mut HetznerClient, server_id: i64| {
bridge.call(Request::GetServerStatus(client.clone(), server_id), |response| match response {
Response::GetServerStatus(result) => result.map_err(|e| e.into()),
_ => Err("Unexpected response".into()),
})
}
})
.register_fn("get_server", {
let bridge = api_bridge.clone();
move |client: &mut HetznerClient, server_id: i64| {
bridge.call(Request::GetServer(client.clone(), server_id), |response| match response {
Response::GetServer(result) => result.map_err(|e| e.into()),
_ => Err("Unexpected response".into()),
})
}
});
let bridge = api_bridge.clone();
engine.register_fn("list_servers", move |client: &mut HetznerClient| {
bridge.call(Request::ListServers(client.clone()), |response| {
match response {
Response::ListServers(result) => result.map_err(|e| e.into()),
_ => Err("Unexpected response".into()),
}
})
});
let bridge = api_bridge.clone();
engine.register_fn("get_server_status", move |client: &mut HetznerClient, server_id: i64| {
bridge.call(Request::GetServerStatus(client.clone(), server_id), |response| {
match response {
Response::GetServerStatus(result) => result.map_err(|e| e.into()),
_ => Err("Unexpected response".into()),
}
})
});
let bridge = api_bridge.clone();
engine.register_fn("get_server", move |client: &mut HetznerClient, server_id: i64| {
bridge.call(Request::GetServer(client.clone(), server_id), |response| {
match response {
Response::GetServer(result) => result.map_err(|e| e.into()),
_ => Err("Unexpected response".into()),
}
})
});
engine
.register_type_with_name::<WrappedServer>("Server")
.register_get("id", |server: &mut WrappedServer| server.0.id)
@@ -86,46 +83,52 @@ pub fn register_hetzner_api(
.register_get("outgoing_traffic", |server: &mut WrappedServer| server.0.outgoing_traffic.unwrap_or(0))
.register_get("primary_disk_size", |server: &mut WrappedServer| server.0.primary_disk_size)
.register_get("rescue_enabled", |server: &mut WrappedServer| server.0.rescue_enabled);
let bridge = api_bridge.clone();
engine.register_fn("reboot", move |server: &mut WrappedServer, client: HetznerClient| {
bridge.call(Request::RebootServer(client, server.0.id), |response| {
match response {
Response::RebootServer(result) => result.map_err(|e| e.into()),
_ => Err("Unexpected response".into()),
}
})
});
let bridge = api_bridge.clone();
engine.register_fn("reset", move |server: &mut WrappedServer, client: HetznerClient| {
bridge.call(Request::ResetServer(client, server.0.id), |response| {
match response {
Response::ResetServer(result) => result.map_err(|e| e.into()),
_ => Err("Unexpected response".into()),
engine
.register_fn("reboot", {
let bridge = api_bridge.clone();
move |client: &mut HetznerClient, server_id: i64| {
bridge.call(Request::RebootServer(client.clone(), server_id), |response| {
match response {
Response::RebootServer(result) => result.map_err(|e| e.into()),
_ => Err("Unexpected response".into()),
}
})
}
})
});
let bridge = api_bridge.clone();
engine.register_fn("enable_rescue_mode", move |server: &mut WrappedServer, client: HetznerClient| {
bridge.call(Request::EnableRescueMode(client, server.0.id), |response| {
match response {
Response::EnableRescueMode(result) => result.map_err(|e| e.into()),
_ => Err("Unexpected response".into()),
.register_fn("reset", {
let bridge = api_bridge.clone();
move |client: &mut HetznerClient, server_id: i64| {
bridge.call(Request::ResetServer(client.clone(), server_id), |response| {
match response {
Response::ResetServer(result) => result.map_err(|e| e.into()),
_ => Err("Unexpected response".into()),
}
})
}
})
});
let bridge = api_bridge.clone();
engine.register_fn("disable_rescue_mode", move |server: &mut WrappedServer, client: HetznerClient| {
bridge.call(Request::DisableRescueMode(client, server.0.id), |response| {
match response {
Response::DisableRescueMode(result) => result.map_err(|e| e.into()),
_ => Err("Unexpected response".into()),
.register_fn("enable_rescue_mode", {
let bridge = api_bridge.clone();
move |client: &mut HetznerClient, server_id: i64| {
bridge.call(Request::EnableRescueMode(client.clone(), server_id), |response| {
match response {
Response::EnableRescueMode(result) => result.map_err(|e| e.into()),
_ => Err("Unexpected response".into()),
}
})
}
})
});
.register_fn("disable_rescue_mode", {
let bridge = api_bridge.clone();
move |client: &mut HetznerClient, server_id: i64| {
bridge.call(Request::DisableRescueMode(client.clone(), server_id), |response| {
match response {
Response::DisableRescueMode(result) => result.map_err(|e| e.into()),
_ => Err("Unexpected response".into()),
}
})
}
});
engine
.register_iterator::<Vec<WrappedServer>>()