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.rs41
1 files changed, 29 insertions, 12 deletions
diff --git a/zoned/src/lib.rs b/zoned/src/lib.rs
index dd35657..f8c78db 100644
--- a/zoned/src/lib.rs
+++ b/zoned/src/lib.rs
@@ -1,4 +1,4 @@
-use figment::{Error, Provider, Figment};
+use figment::Provider;
use rocket::{get, post, serde::json::Json, Build, Rocket, State};
use rocket_okapi::{
openapi, openapi_get_routes,
@@ -6,31 +6,41 @@ use rocket_okapi::{
settings::UrlObject,
swagger_ui::{make_swagger_ui, SwaggerUIConfig},
};
-use serde::Serialize;
+use serde::{Deserialize, Serialize};
use zone_core::{Container, PartialEqOrDefault};
-#[derive(Default, Serialize)]
+#[derive(Default, Serialize, Deserialize)]
pub struct Config {
- pub zfs_config: zone_zfs::Config,
pub rocket_config: rocket::Config,
+
+ pub zfs_config: zone_zfs::Config,
}
impl Config {
- pub fn new() -> Result<Config, Error> {
+ pub fn new() -> Result<Config, figment::Error> {
Config::custom(zone_zfs::Config::figment(), rocket::Config::figment())
}
pub fn custom<T: Provider, U: Provider>(
zfs_provider: T,
rocket_provider: U,
- ) -> Result<Config, Error> {
+ ) -> Result<Config, figment::Error> {
Ok(Config {
- zfs_config: zone_zfs::Config::from(&zfs_provider)?,
rocket_config: rocket::Config::from(&rocket_provider),
+ zfs_config: zone_zfs::Config::from(&zfs_provider)?,
})
}
}
+/// # Test endpoint
+///
+/// Returns a list of containers based on the query.
+#[openapi(tag = "Testing")]
+#[get("/test")]
+pub fn test_endpoint(zfs_config: &State<zone_zfs::Config>) -> Json<String> {
+ Json(zfs_config.quota.to_owned())
+}
+
/// # List containers
///
/// Returns a list of containers based on the query.
@@ -48,12 +58,15 @@ pub fn container_list(container: Container) -> Json<Vec<Container>> {
/// # Create container
#[openapi(tag = "Container")]
#[post("/container", data = "<container>")]
-fn create_container(container: Json<Container>, config: &State<Config>) -> Json<Container> {
+fn create_container(
+ container: Json<Container>,
+ zfs_config: &State<zone_zfs::Config>,
+) -> Json<Container> {
// let zone_config = ZoneConf::new().unwrap();
let container = zone_zfs::create_file_system(
container.template.clone(),
format!("{}-{}", container.user, container.id),
- &config.zfs_config,
+ zfs_config,
);
match container {
@@ -62,9 +75,12 @@ fn create_container(container: Json<Container>, config: &State<Config>) -> Json<
}
}
-pub fn build_rocket(config: Figment) -> Rocket<Build> {
- rocket::custom(config)
- .mount("/", openapi_get_routes![container_list, create_container,])
+pub fn build_rocket(config: Config) -> Rocket<Build> {
+ rocket::custom(config.rocket_config)
+ .mount(
+ "/",
+ openapi_get_routes![test_endpoint, container_list, create_container,],
+ )
.mount(
"/swagger-ui/",
make_swagger_ui(&SwaggerUIConfig {
@@ -87,4 +103,5 @@ pub fn build_rocket(config: Figment) -> Rocket<Build> {
..Default::default()
}),
)
+ .manage(config.zfs_config)
}