From 22f0adf26a5d7eb5b1de60ab6a486f66ffac3341 Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Tue, 30 Oct 2018 14:06:37 +0100 Subject: [PATCH] try to define an static api --- src/main.rs | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 71 insertions(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index 027f9c12..3e564578 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,10 +3,17 @@ extern crate phf; extern crate failure; +use failure::*; extern crate json_schema; use json_schema::*; +extern crate serde_json; +#[macro_use] +extern crate serde_derive; + +use serde_json::{json, Value}; + static PARAMETERS1: StaticPropertyMap = phf_map! { "force" => Boolean!{ @@ -45,11 +52,74 @@ static PARAMETERS1: StaticPropertyMap = phf_map! { }; +struct ApiMethod { + description: &'static str, + properties: StaticPropertyMap, + returns: Jss, + handler: fn(Value) -> Result, +} + +#[derive(Serialize, Deserialize)] +struct Myparam { + test: bool, +} + +fn test_api_handler(param: Value) -> Result { + println!("This is a test {}", param); + + // let force: Option = Some(false); + + //if let Some(force) = param.force { + //} + + let force = param["force"].as_bool() + .ok_or_else(|| format_err!("meine fehlermeldung"))?; + + if let Some(force) = param["force"].as_bool() { + } + + let tmp: Myparam = serde_json::from_value(param)?; + + + Ok(json!(null)) +} + +static TEST_API_METHOD: ApiMethod = ApiMethod { + description: "This is a simple test.", + properties: phf_map! { + "force" => Boolean!{ + description => "Test for boolean options." + } + }, + returns: Jss::Null, + handler: test_api_handler, +}; + +type StaticSubdirMap = phf::Map<&'static str, &'static MethodInfo>; + +struct MethodInfo { + path: &'static str, + get: Option<&'static ApiMethod>, + subdirs: Option<&'static StaticSubdirMap>, +} + +static API3_NODES: MethodInfo = MethodInfo { + path: "", + get: Some(&TEST_API_METHOD), + subdirs: None, +}; + +static API3: MethodInfo = MethodInfo { + path: "", + get: Some(&TEST_API_METHOD), + subdirs: Some(&phf_map!{"nodes" => &API3_NODES}), +}; + fn main() { println!("Fast Static Type Definitions 1"); for (k, v) in PARAMETERS1.entries() { println!("Parameter: {} Value: {:?}", k, v); } - + }