use super::lys_http::{LysHttp, segment};
use super::{SeatStarter, ServiceEffectError};
use std::sync::Arc;
pub struct LysSeatStarter {
http: Arc<dyn LysHttp>,
bearer: String,
machine: String,
}
impl std::fmt::Debug for LysSeatStarter {
fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
formatter
.debug_struct("LysSeatStarter")
.field("http", &self.http)
.field("machine", &self.machine)
.finish_non_exhaustive()
}
}
impl LysSeatStarter {
#[must_use]
pub const fn new(http: Arc<dyn LysHttp>, bearer: String, machine: String) -> Self {
Self {
http,
bearer,
machine,
}
}
}
impl SeatStarter for LysSeatStarter {
fn start(&self, seat: &str, operation: &str) -> Result<(), ServiceEffectError> {
let route = format!("agents/{}/start-command", segment(seat));
let body = serde_json::json!({
"machine": self.machine,
"operation": operation,
});
let answer = self.http.post(&self.bearer, &route, &body)?;
if answer.succeeded() {
Ok(())
} else {
Err(answer.refused(&route))
}
}
}