implement Into Arc<Schema>
This commit is contained in:
		@ -57,10 +57,6 @@ impl BooleanSchema {
 | 
			
		||||
        self.default = Some(default);
 | 
			
		||||
        self
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn arc(self) -> Arc<Schema> {
 | 
			
		||||
        Arc::new(self.into())
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Debug)]
 | 
			
		||||
@ -96,10 +92,6 @@ impl IntegerSchema {
 | 
			
		||||
        self.maximum = Some(maximium);
 | 
			
		||||
        self
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn arc(self) -> Arc<Schema> {
 | 
			
		||||
        Arc::new(self.into())
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -143,10 +135,6 @@ impl StringSchema {
 | 
			
		||||
        self.max_length = Some(max_length);
 | 
			
		||||
        self
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn arc(self) -> Arc<Schema> {
 | 
			
		||||
        Arc::new(self.into())
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Debug)]
 | 
			
		||||
@ -163,10 +151,6 @@ impl ArraySchema {
 | 
			
		||||
            items: item_schema,
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn arc(self) -> Arc<Schema> {
 | 
			
		||||
        Arc::new(self.into())
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Debug)]
 | 
			
		||||
@ -192,19 +176,15 @@ impl ObjectSchema {
 | 
			
		||||
        self
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn required(mut self, name: &'static str, schema: Arc<Schema>) -> Self {
 | 
			
		||||
        self.properties.insert(name, (false, schema));
 | 
			
		||||
    pub fn required<S: Into<Arc<Schema>>>(mut self, name: &'static str, schema: S) -> Self {
 | 
			
		||||
        self.properties.insert(name, (false, schema.into()));
 | 
			
		||||
        self
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn optional(mut self, name: &'static str, schema: Arc<Schema>) -> Self {
 | 
			
		||||
        self.properties.insert(name, (true, schema));
 | 
			
		||||
    pub fn optional<S: Into<Arc<Schema>>>(mut self, name: &'static str, schema: S) -> Self {
 | 
			
		||||
        self.properties.insert(name, (true, schema.into()));
 | 
			
		||||
        self
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn arc(self) -> Arc<Schema> {
 | 
			
		||||
        Arc::new(self.into())
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Debug)]
 | 
			
		||||
@ -223,18 +203,36 @@ impl From<StringSchema> for Schema {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl From<StringSchema> for Arc<Schema> {
 | 
			
		||||
    fn from(string_schema: StringSchema) -> Self {
 | 
			
		||||
        Arc::new(Schema::String(string_schema))
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl From<BooleanSchema> for Schema {
 | 
			
		||||
    fn from(boolean_schema: BooleanSchema) -> Self {
 | 
			
		||||
        Schema::Boolean(boolean_schema)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl From<BooleanSchema> for Arc<Schema> {
 | 
			
		||||
    fn from(boolean_schema: BooleanSchema) -> Self {
 | 
			
		||||
        Arc::new(Schema::Boolean(boolean_schema))
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl From<IntegerSchema> for Schema {
 | 
			
		||||
    fn from(integer_schema: IntegerSchema) -> Self {
 | 
			
		||||
        Schema::Integer(integer_schema)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl From<IntegerSchema> for Arc<Schema> {
 | 
			
		||||
    fn from(integer_schema: IntegerSchema) -> Self {
 | 
			
		||||
        Arc::new(Schema::Integer(integer_schema))
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl From<ObjectSchema> for Schema {
 | 
			
		||||
    fn from(object_schema: ObjectSchema) -> Self {
 | 
			
		||||
        Schema::Object(object_schema)
 | 
			
		||||
@ -247,6 +245,12 @@ impl From<ArraySchema> for Schema {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl From<ArraySchema> for Arc<Schema> {
 | 
			
		||||
    fn from(array_schema: ArraySchema) -> Self {
 | 
			
		||||
        Arc::new(Schema::Array(array_schema))
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub enum ApiStringFormat {
 | 
			
		||||
    Enum(Vec<String>),
 | 
			
		||||
    Pattern(Box<Regex>),
 | 
			
		||||
@ -456,13 +460,13 @@ fn test_schema1() {
 | 
			
		||||
fn test_query_string() {
 | 
			
		||||
 | 
			
		||||
    let schema = ObjectSchema::new("Parameters.")
 | 
			
		||||
        .required("name", StringSchema::new("Name.").arc());
 | 
			
		||||
        .required("name", StringSchema::new("Name."));
 | 
			
		||||
 | 
			
		||||
    let res = parse_query_string("", &schema, true);
 | 
			
		||||
    assert!(res.is_err());
 | 
			
		||||
 | 
			
		||||
    let schema = ObjectSchema::new("Parameters.")
 | 
			
		||||
        .optional("name", StringSchema::new("Name.").arc());
 | 
			
		||||
        .optional("name", StringSchema::new("Name."));
 | 
			
		||||
 | 
			
		||||
    let res = parse_query_string("", &schema, true);
 | 
			
		||||
    assert!(res.is_ok());
 | 
			
		||||
@ -474,7 +478,6 @@ fn test_query_string() {
 | 
			
		||||
            "name", StringSchema::new("Name.")
 | 
			
		||||
                .min_length(5)
 | 
			
		||||
                .max_length(10)
 | 
			
		||||
                .arc()
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
    let res = parse_query_string("name=abcd", &schema, true);
 | 
			
		||||
@ -495,7 +498,6 @@ fn test_query_string() {
 | 
			
		||||
        .required(
 | 
			
		||||
            "name", StringSchema::new("Name.")
 | 
			
		||||
                .format(Arc::new(ApiStringFormat::Pattern(Box::new(Regex::new("test").unwrap()))))
 | 
			
		||||
                .arc()
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
    let res = parse_query_string("name=abcd", &schema, true);
 | 
			
		||||
@ -508,7 +510,6 @@ fn test_query_string() {
 | 
			
		||||
        .required(
 | 
			
		||||
            "name", StringSchema::new("Name.")
 | 
			
		||||
                .format(Arc::new(ApiStringFormat::Pattern(Box::new(Regex::new("^test$").unwrap()))))
 | 
			
		||||
                .arc()
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
    let res = parse_query_string("name=ateststring", &schema, true);
 | 
			
		||||
@ -523,7 +524,6 @@ fn test_query_string() {
 | 
			
		||||
        .required(
 | 
			
		||||
            "name", StringSchema::new("Name.")
 | 
			
		||||
                .format(Arc::new(ApiStringFormat::Enum(vec!["ev1".into(), "ev2".into()])))
 | 
			
		||||
                .arc()
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
    let res = parse_query_string("name=noenum", &schema, true);
 | 
			
		||||
@ -546,7 +546,6 @@ fn test_query_integer() {
 | 
			
		||||
    let schema = ObjectSchema::new("Parameters.")
 | 
			
		||||
        .required(
 | 
			
		||||
            "count" , IntegerSchema::new("Count.")
 | 
			
		||||
                .arc()
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
    let res = parse_query_string("", &schema, true);
 | 
			
		||||
@ -557,7 +556,6 @@ fn test_query_integer() {
 | 
			
		||||
            "count", IntegerSchema::new("Count.")
 | 
			
		||||
                .minimum(-3)
 | 
			
		||||
                .maximum(50)
 | 
			
		||||
                .arc()
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
    let res = parse_query_string("", &schema, true);
 | 
			
		||||
@ -591,7 +589,6 @@ fn test_query_boolean() {
 | 
			
		||||
    let schema = ObjectSchema::new("Parameters.")
 | 
			
		||||
        .required(
 | 
			
		||||
            "force", BooleanSchema::new("Force.")
 | 
			
		||||
                .arc()
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
    let res = parse_query_string("", &schema, true);
 | 
			
		||||
@ -600,7 +597,6 @@ fn test_query_boolean() {
 | 
			
		||||
    let schema = ObjectSchema::new("Parameters.")
 | 
			
		||||
        .optional(
 | 
			
		||||
            "force", BooleanSchema::new("Force.")
 | 
			
		||||
                .arc()
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
    let res = parse_query_string("", &schema, true);
 | 
			
		||||
 | 
			
		||||
@ -45,11 +45,7 @@ pub fn router() -> Router {
 | 
			
		||||
            handler: test_sync_api_handler,
 | 
			
		||||
            description: "This is a simple test.",
 | 
			
		||||
            parameters: ObjectSchema::new("This is a simple test.")
 | 
			
		||||
                .optional(
 | 
			
		||||
                    "force",
 | 
			
		||||
                    BooleanSchema::new("Test for boolean options")
 | 
			
		||||
                        .arc()
 | 
			
		||||
                ),
 | 
			
		||||
                .optional("force", BooleanSchema::new("Test for boolean options")),
 | 
			
		||||
            returns: Schema::Null,
 | 
			
		||||
        })
 | 
			
		||||
        .subdirs({
 | 
			
		||||
 | 
			
		||||
@ -159,7 +159,6 @@ fn test_boolean_arg() {
 | 
			
		||||
    let schema =  ObjectSchema::new("Parameters:")
 | 
			
		||||
        .required(
 | 
			
		||||
            "enable", BooleanSchema::new("Enable")
 | 
			
		||||
                .arc()
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
    let mut variants: Vec<(Vec<&str>, bool)> = vec![];
 | 
			
		||||
@ -191,8 +190,8 @@ fn test_boolean_arg() {
 | 
			
		||||
fn test_argument_paramenter() {
 | 
			
		||||
 | 
			
		||||
    let schema = ObjectSchema::new("Parameters:")
 | 
			
		||||
        .required("enable", BooleanSchema::new("Enable.").arc())
 | 
			
		||||
        .required("storage", StringSchema::new("Storage.").arc());
 | 
			
		||||
        .required("enable", BooleanSchema::new("Enable."))
 | 
			
		||||
        .required("storage", StringSchema::new("Storage."));
 | 
			
		||||
 | 
			
		||||
    let args = vec!["-enable", "local"];
 | 
			
		||||
    let string_args = args.iter().map(|s| s.to_string()).collect();
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,7 @@
 | 
			
		||||
extern crate apitest;
 | 
			
		||||
 | 
			
		||||
use std::sync::Arc;
 | 
			
		||||
 | 
			
		||||
use apitest::api::schema::*;
 | 
			
		||||
use apitest::api::router::*;
 | 
			
		||||
use apitest::api::config::*;
 | 
			
		||||
@ -16,7 +18,7 @@ use hyper;
 | 
			
		||||
fn main() {
 | 
			
		||||
    println!("Proxmox REST Server example.");
 | 
			
		||||
 | 
			
		||||
    let prop = StringSchema::new("This is a test").arc();
 | 
			
		||||
    let prop : Arc<Schema> = StringSchema::new("This is a test").into();
 | 
			
		||||
 | 
			
		||||
    //let prop = Arc::new(ApiString!{ optional => true });
 | 
			
		||||
    let schema = ObjectSchema::new("Parameters.")
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user