SectionConfigPlugin: add schema

This commit is contained in:
Dietmar Maurer 2018-11-27 08:41:25 +01:00
parent b943ed8d2b
commit 803b95a01d
1 changed files with 23 additions and 1 deletions

View File

@ -5,10 +5,21 @@ use std::io::Read;
use std::collections::HashMap; use std::collections::HashMap;
use serde_json::{json, Value}; use serde_json::{json, Value};
use std::sync::Arc;
use crate::api::schema::*;
pub struct SectionConfigPlugin { pub struct SectionConfigPlugin {
type_name: String, type_name: String,
properties: ObjectSchema,
} }
impl SectionConfigPlugin {
pub fn new(type_name: String, properties: ObjectSchema) -> Self {
Self { type_name, properties }
}
}
pub struct SectionConfig { pub struct SectionConfig {
plugins: HashMap<String, SectionConfigPlugin>, plugins: HashMap<String, SectionConfigPlugin>,
@ -30,6 +41,10 @@ impl SectionConfig {
} }
} }
pub fn register_plugin(&mut self, plugin: SectionConfigPlugin) {
self.plugins.insert(plugin.type_name.clone(), plugin);
}
pub fn parse(&self, filename: &str, raw: &str) -> Result<(), Error> { pub fn parse(&self, filename: &str, raw: &str) -> Result<(), Error> {
let mut line_no = 0; let mut line_no = 0;
@ -124,8 +139,15 @@ fn test_section_config1() {
//let mut contents = String::new(); //let mut contents = String::new();
//file.read_to_string(&mut contents).unwrap(); //file.read_to_string(&mut contents).unwrap();
let config = SectionConfig::new(); let plugin = SectionConfigPlugin::new(
"lvmthin".to_string(),
ObjectSchema::new("lvmthin properties")
.required("thinpool", StringSchema::new("LVM thin pool name."))
.required("vgname", StringSchema::new("LVM volume group name."))
);
let mut config = SectionConfig::new();
config.register_plugin(plugin);
let raw = r" let raw = r"