use structform::{
derive_form_input, impl_text_input_with_stringops, ParseAndFormat, ParseError, StructForm,
};
#[derive(Default, Debug, PartialEq, Eq)]
struct LoginData {
username: String,
password: String,
}
#[derive(Default, Clone, StructForm)]
#[structform(model = "LoginData")]
struct LoginForm {
username: FormTextInput<String>,
password: FormPasswordInput<String>,
#[structform(submit_attempted)]
submit_attempted: bool,
}
derive_form_input! {FormTextInput}
impl_text_input_with_stringops!(FormTextInput, String);
derive_form_input! {FormPasswordInput}
impl ParseAndFormat<String> for FormPasswordInput<String> {
fn parse(value: &str) -> Result<String, ParseError> {
if value.is_empty() {
Err(ParseError::Required)
} else {
Ok(value.into())
}
}
fn format(value: &String) -> String {
value.clone()
}
}
#[test]
fn a_form_tracks_if_submit_is_attempted() {
let mut form = LoginForm::default();
assert_eq!(form.submit_attempted, false);
let _parsed = form.submit();
assert_eq!(form.submit_attempted, true);
}