use metamorphose::Form;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Deserialize, PartialEq, Debug)]
pub struct Widget {
pub id: String, pub label: String,
pub widget: String,
pub input_type: String, pub name: String, pub value: String,
pub placeholder: String,
pub pattern: String, pub minlength: usize,
pub maxlength: usize,
pub required: bool,
pub checked: bool, pub unique: bool,
pub hidden: bool,
pub disabled: bool,
pub readonly: bool,
pub step: String,
pub min: String,
pub max: String,
pub other_attrs: String, pub css_classes: String, pub choices: Vec<(String, String)>,
pub hint: String,
pub warning: String, pub error: String, }
impl Default for Widget {
fn default() -> Self {
Widget {
id: String::new(),
label: String::new(),
widget: String::from("inputText"),
input_type: String::from("text"),
name: String::new(),
value: String::new(),
placeholder: String::new(),
pattern: String::new(),
minlength: 0_usize,
maxlength: 256_usize,
required: false,
checked: false,
unique: false,
hidden: false,
disabled: false,
readonly: false,
step: String::from("0"),
min: String::from("0"),
max: String::from("0"),
other_attrs: String::new(),
css_classes: String::new(),
choices: Vec::new(),
hint: String::new(),
warning: String::new(),
error: String::new(),
}
}
}
#[derive(Deserialize)]
struct TransMapWidgetType {
pub map_widget_type: std::collections::HashMap<String, String>,
}
#[derive(Deserialize)]
struct TransMapWidgets {
pub map_widgets: std::collections::HashMap<String, Widget>,
}
pub trait ToForm {
fn map_widget_type() -> Result<HashMap<String, String>, Box<dyn std::error::Error>>;
fn widgets() -> Result<HashMap<String, Widget>, Box<dyn std::error::Error>>;
}
#[Form]
#[derive(Serialize, Deserialize, Default, Clone, Debug)]
pub struct LoginForm {
#[field_attrs(widget = "inputEmail")]
pub email: String,
#[field_attrs(widget = "inputPassword")]
pub password: String,
}
#[test]
fn it_work() {
let mut widgets: HashMap<String, Widget> = HashMap::new();
let mut widget = Widget::default();
widget.id = "login-form--email".to_string();
widget.widget = "inputEmail".to_string();
widget.input_type = "email".to_string();
widget.name = "email".to_string();
widgets.insert("email".to_string(), widget);
let mut widget = Widget::default();
widget.id = "login-form--password".to_string();
widget.widget = "inputPassword".to_string();
widget.input_type = "password".to_string();
widget.name = "password".to_string();
widgets.insert("password".to_string(), widget);
assert_eq!(widgets, LoginForm::widgets().unwrap());
}