diff --git a/src/api/router.rs b/src/api/router.rs index ca53e996..e9251b89 100644 --- a/src/api/router.rs +++ b/src/api/router.rs @@ -3,12 +3,13 @@ use failure::*; use crate::api::schema::*; use serde_json::{Value}; use std::collections::HashMap; +use std::sync::Arc; type ApiHandlerFn = fn(Value, &ApiMethod) -> Result; pub struct ApiMethod { pub parameters: ObjectSchema, - pub returns: Schema, + pub returns: Arc, pub handler: ApiHandlerFn, } @@ -18,10 +19,17 @@ impl ApiMethod { Self { parameters, handler, - returns: Schema::Null, + returns: Arc::new(Schema::Null), } } + pub fn returns>>(mut self, schema: S) -> Self { + + self.returns = schema.into(); + + self + } + } pub enum SubRoute { diff --git a/src/api3.rs b/src/api3.rs index de8d1414..4fb3667d 100644 --- a/src/api3.rs +++ b/src/api3.rs @@ -38,19 +38,17 @@ fn get_version(param: Value, _info: &ApiMethod) -> Result { })) } - pub fn router() -> Router { let route4 = Router::new() - .get(ApiMethod { - parameters: ObjectSchema::new("Another Endpoint."), - returns: Schema::Null, - handler: |param, _info| { + .get(ApiMethod::new( + |param, _info| { println!("This is a clousure handler: {}", param); Ok(json!(null)) - }, - }); + }, + ObjectSchema::new("Another Endpoint.")) + .returns(Schema::Null)); let nodeinfo = Router::new() @@ -70,11 +68,9 @@ pub fn router() -> Router { ObjectSchema::new("Proxmox Backup Server API version."))); let route = Router::new() - .get(ApiMethod { - handler: get_version, - parameters: ObjectSchema::new("Directory index."), - returns: Schema::Null, - }) + .get(ApiMethod::new( + get_version, + ObjectSchema::new("Directory index."))) .subdir("version", version) .subdir("nodes", nodes);