bffh/src/api/machine.rs

121 lines
2.8 KiB
Rust
Raw Normal View History

2020-11-20 13:06:55 +01:00
use std::sync::Arc;
use std::ops::Deref;
2020-11-17 14:15:29 +01:00
use capnp::capability::Promise;
use capnp::Error;
2020-11-20 15:43:03 +01:00
use crate::schema::api_capnp::State;
2020-11-20 13:06:55 +01:00
use crate::schema::api_capnp::machine::*;
use crate::connection::Session;
use crate::db::Databases;
2020-11-20 15:43:03 +01:00
use crate::db::machine::Status;
2020-12-16 11:32:31 +01:00
use crate::machine::Machine as NwMachine;
2020-11-17 14:15:29 +01:00
2020-11-20 13:06:55 +01:00
#[derive(Clone)]
pub struct Machine {
session: Arc<Session>,
2020-12-16 11:32:31 +01:00
machine: NwMachine,
2020-11-20 13:06:55 +01:00
db: Databases,
}
2020-11-17 14:15:29 +01:00
2020-11-17 14:28:04 +01:00
impl Machine {
2020-12-16 11:32:31 +01:00
pub fn new(session: Arc<Session>, machine: NwMachine, db: Databases) -> Self {
Machine { session, machine, db }
2020-11-17 14:28:04 +01:00
}
2020-11-20 15:43:03 +01:00
pub fn fill(self: Arc<Self>, builder: &mut Builder) {
// TODO check permissions
builder.set_read(capnp_rpc::new_client(Read(self.clone())));
// TODO set all the others
}
pub async fn fill_info(&self, builder: &mut m_info::Builder<'_>) {
2020-12-16 12:42:14 +01:00
let guard = self.machine.lock().await;
builder.set_name(guard.desc.name.as_ref());
if let Some(desc) = guard.desc.description.as_ref() {
builder.set_description(desc);
}
match guard.read_state().lock_ref().deref().state {
2020-12-16 12:42:14 +01:00
Status::Free => {
builder.set_state(State::Free);
}
Status::Disabled => {
builder.set_state(State::Disabled);
}
Status::Blocked(_,_) => {
2020-12-16 12:42:14 +01:00
builder.set_state(State::Blocked);
}
Status::InUse(_,_) => {
2020-12-16 12:42:14 +01:00
builder.set_state(State::InUse);
}
Status::ToCheck(_,_) => {
2020-12-16 12:42:14 +01:00
builder.set_state(State::ToCheck);
}
Status::Reserved(_,_) => {
2020-12-16 12:42:14 +01:00
builder.set_state(State::Reserved);
}
}
2020-11-20 15:43:03 +01:00
}
2020-11-17 14:28:04 +01:00
}
2020-11-20 13:06:55 +01:00
struct Read(Arc<Machine>);
2020-11-17 14:28:04 +01:00
impl read::Server for Read {
2020-11-17 14:15:29 +01:00
fn info(&mut self,
_params: read::InfoParams,
2020-11-20 15:43:03 +01:00
mut results: read::InfoResults)
2020-11-17 14:15:29 +01:00
-> Promise<(), Error>
{
2020-11-20 15:43:03 +01:00
let mut b = results.get().init_minfo();
self.0.fill_info(&mut b);
Promise::ok(())
2020-11-17 14:15:29 +01:00
}
}
2020-11-20 13:06:55 +01:00
struct Write(Arc<Machine>);
2020-11-17 14:28:04 +01:00
impl write::Server for Write {
2020-11-17 14:15:29 +01:00
fn use_(&mut self,
_params: write::UseParams,
_results: write::UseResults)
-> Promise<(), Error>
{
unimplemented!()
}
}
2020-11-20 13:06:55 +01:00
struct Manage(Arc<Machine>);
2020-11-17 14:28:04 +01:00
impl manage::Server for Manage {
2020-11-17 14:15:29 +01:00
fn ok(&mut self,
_params: manage::OkParams,
_results: manage::OkResults)
-> Promise<(), Error>
{
unimplemented!()
}
}
2020-11-20 13:06:55 +01:00
struct Admin(Arc<Machine>);
2020-11-17 14:28:04 +01:00
impl admin::Server for Admin {
2020-11-17 14:15:29 +01:00
fn force_set_state(&mut self,
_params: admin::ForceSetStateParams,
_results: admin::ForceSetStateResults)
-> Promise<(), Error>
{
unimplemented!()
}
fn force_set_user(&mut self,
_params: admin::ForceSetUserParams,
_results: admin::ForceSetUserResults)
-> Promise<(), Error>
{
unimplemented!()
}
}