diff options
author | Toby Vincent <tobyv13@gmail.com> | 2022-02-01 01:52:04 -0600 |
---|---|---|
committer | Toby Vincent <tobyv13@gmail.com> | 2022-02-01 01:52:04 -0600 |
commit | 1a5a7eed4df2ee7aebdb752b78e7da78e5f15d28 (patch) | |
tree | d6a4575aad284735c1fbb8ceb98b4fe80798cfdc /zoned/src/lib.rs | |
parent | 493d909da8c6540b63ca2f461a9d2462715ebd0e (diff) |
fix: integrated figment with rocket
Co-authored-by: Neil Kollack <nkollack@gmail.com>
Diffstat (limited to 'zoned/src/lib.rs')
-rw-r--r-- | zoned/src/lib.rs | 46 |
1 files changed, 22 insertions, 24 deletions
diff --git a/zoned/src/lib.rs b/zoned/src/lib.rs index 3ec492a..dd35657 100644 --- a/zoned/src/lib.rs +++ b/zoned/src/lib.rs @@ -1,28 +1,33 @@ -use figment::{Figment, Provider, Error}; -use rocket::{get, post, serde::json::Json, Build, Config, Rocket}; +use figment::{Error, Provider, Figment}; +use rocket::{get, post, serde::json::Json, Build, Rocket, State}; use rocket_okapi::{ openapi, openapi_get_routes, rapidoc::{make_rapidoc, GeneralConfig, HideShowConfig, RapiDocConfig}, settings::UrlObject, swagger_ui::{make_swagger_ui, SwaggerUIConfig}, }; -use std::net::Ipv4Addr; +use serde::Serialize; use zone_core::{Container, PartialEqOrDefault}; -use zone_zfs::file_system::ZFSConfig; -struct ZoneConf { - pub config: ZFSConfig, - pub figment: Figment, +#[derive(Default, Serialize)] +pub struct Config { + pub zfs_config: zone_zfs::Config, + pub rocket_config: rocket::Config, } -impl ZoneConf { - pub fn new() -> Result<ZoneConf, Error> { - ZoneConf::custom(Config::figment()) +impl Config { + pub fn new() -> Result<Config, Error> { + Config::custom(zone_zfs::Config::figment(), rocket::Config::figment()) } - pub fn custom<T: Provider>(provider: T) -> Result<ZoneConf, Error> { - let figment = Figment::from(provider); - Ok(ZoneConf { config: ZFSConfig::from(&figment)?, figment }) + pub fn custom<T: Provider, U: Provider>( + zfs_provider: T, + rocket_provider: U, + ) -> Result<Config, Error> { + Ok(Config { + zfs_config: zone_zfs::Config::from(&zfs_provider)?, + rocket_config: rocket::Config::from(&rocket_provider), + }) } } @@ -43,13 +48,12 @@ pub fn container_list(container: Container) -> Json<Vec<Container>> { /// # Create container #[openapi(tag = "Container")] #[post("/container", data = "<container>")] -fn create_container(container: Json<Container>) -> Json<Container> { - let zone_config = ZoneConf::new().unwrap(); - +fn create_container(container: Json<Container>, config: &State<Config>) -> Json<Container> { + // let zone_config = ZoneConf::new().unwrap(); let container = zone_zfs::create_file_system( container.template.clone(), format!("{}-{}", container.user, container.id), - &zone_config.config.quota, + &config.zfs_config, ); match container { @@ -58,13 +62,7 @@ fn create_container(container: Json<Container>) -> Json<Container> { } } -pub fn build_rocket() -> Rocket<Build> { - let config = Config { - address: Ipv4Addr::new(127, 0, 0, 1).into(), - port: 8000, - ..Config::debug_default() - }; - +pub fn build_rocket(config: Figment) -> Rocket<Build> { rocket::custom(config) .mount("/", openapi_get_routes![container_list, create_container,]) .mount( |