use br_addon::action::Action;
use br_addon::module::Module;
use br_fields::Field;
use json::{object, JsonValue};

#[derive(Debug, Clone)]
pub struct {{model}} {}

impl Module for {{model}} {
    fn title(&self) -> &'static str { "{{title}}"}
    fn table(&self) -> bool {
        true
    }
    fn table_unique(&self) -> &'static [&'static str] {
        &[]
    }

    fn table_index(&mut self) -> &'static [&'static [&'static str]] {
        &[]
    }

    fn fields(&mut self) -> JsonValue {
        let fields = object! {};
        fields;
    }
    fn action(&mut self, name: &str) -> Result<Box<dyn Action>, String> {
        Ok(match name {
             "menu" => Box::new({{model}}Menu {module: self.clone(),}),
             "table" => Box::new({{model}}Table {module: self.clone(),}),
             "add" => Box::new({{model}}Add {module: self.clone(),}),
             "del" => Box::new({{model}}Del {module: self.clone(),}),
             "get" => Box::new({{model}}Get {module: self.clone(),}),
             "put" => Box::new({{model}}Put {module: self.clone(),}),
             "select" => Box::new({{model}}Select {module: self.clone(),}),
             _ => return Err(format!("invalid action: {}", name)),
        })
    }
}
mod menu;
mod table;
mod add;
mod del;
mod get;
mod put;
mod select;