mirror of
https://github.com/edera-dev/krata.git
synced 2025-08-02 21:00:55 +00:00
56 lines
1.3 KiB
Rust
56 lines
1.3 KiB
Rust
|
use anyhow::{anyhow, Result};
|
||
|
use krata::{
|
||
|
control::{GuestInfo, LaunchResponse, Request, Response},
|
||
|
stream::ConnectionStreams,
|
||
|
};
|
||
|
|
||
|
use crate::{
|
||
|
listen::DaemonRequestHandler,
|
||
|
runtime::{launch::GuestLaunchRequest, Runtime},
|
||
|
};
|
||
|
|
||
|
pub struct LaunchRequestHandler {}
|
||
|
|
||
|
impl Default for LaunchRequestHandler {
|
||
|
fn default() -> Self {
|
||
|
Self::new()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl LaunchRequestHandler {
|
||
|
pub fn new() -> Self {
|
||
|
Self {}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#[async_trait::async_trait]
|
||
|
impl DaemonRequestHandler for LaunchRequestHandler {
|
||
|
fn accepts(&self, request: &Request) -> bool {
|
||
|
matches!(request, Request::Launch(_))
|
||
|
}
|
||
|
|
||
|
async fn handle(
|
||
|
&self,
|
||
|
_: ConnectionStreams,
|
||
|
runtime: Runtime,
|
||
|
request: Request,
|
||
|
) -> Result<Response> {
|
||
|
let launch = match request {
|
||
|
Request::Launch(launch) => launch,
|
||
|
_ => return Err(anyhow!("unknown request")),
|
||
|
};
|
||
|
let guest: GuestInfo = runtime
|
||
|
.launch(GuestLaunchRequest {
|
||
|
image: &launch.image,
|
||
|
vcpus: launch.vcpus,
|
||
|
mem: launch.mem,
|
||
|
env: launch.env,
|
||
|
run: launch.run,
|
||
|
debug: false,
|
||
|
})
|
||
|
.await?
|
||
|
.into();
|
||
|
Ok(Response::Launch(LaunchResponse { guest }))
|
||
|
}
|
||
|
}
|