aboutsummaryrefslogtreecommitdiffstats
path: root/zoned/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'zoned/src/lib.rs')
-rw-r--r--zoned/src/lib.rs52
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 {