diff options
Diffstat (limited to 'zoned/src/lib.rs')
-rw-r--r-- | zoned/src/lib.rs | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/zoned/src/lib.rs b/zoned/src/lib.rs index f17530f..4784ff5 100644 --- a/zoned/src/lib.rs +++ b/zoned/src/lib.rs @@ -1,4 +1,56 @@ +use rocket::{ + http::Status, + response::{self, Responder}, + Request, +}; +use rocket_okapi::{ + gen::OpenApiGenerator, okapi::openapi3::Responses, response::OpenApiResponderInner, + util::ensure_status_code_exists, +}; use serde::{Deserialize, Serialize}; +use thiserror::Error; +use zone_core::Container; + +type Result<T> = std::result::Result<T, Error>; + +#[derive(Error, Debug)] +pub enum Error { + #[error("Container Error {0:?}")] + Container(Container), + + #[error("ZFS Error {source:?}")] + ZFS { + #[from] + source: zone_zfs::Error, + }, + + #[error("NSpawn Error {source:?}")] + Nspawn { + #[from] + source: zone_nspawn::Error, + }, + + #[error(transparent)] + Other(#[from] anyhow::Error), +} + +impl<'r, 'o: 'r> Responder<'r, 'o> for Error { + fn respond_to(self, req: &'r Request<'_>) -> response::Result<'o> { + // https://stuarth.github.io/rocket-error-handling/ + // match self { + // _ => Status::InternalServerError.respond_to(req), + // } + Status::InternalServerError.respond_to(req) + } +} + +impl OpenApiResponderInner for Error { + fn responses(_gen: &mut OpenApiGenerator) -> rocket_okapi::Result<Responses> { + let mut responses = Responses::default(); + ensure_status_code_exists(&mut responses, 500); + Ok(responses) + } +} #[derive(Default, Serialize, Deserialize)] pub struct Config { |