use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FormField {
pub name: String,
pub field_type: FieldType,
pub value: Option<FieldValue>,
pub default_value: Option<FieldValue>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum FieldType {
Text,
Checkbox,
RadioButton,
Dropdown,
ListBox,
PushButton,
Signature,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum FieldValue {
Text(String),
Boolean(bool),
Choice(String),
Choices(Vec<String>),
}
impl FormField {
pub fn display_value(&self) -> String {
let val = self.value.as_ref().or(self.default_value.as_ref());
match val {
Some(FieldValue::Text(s)) => s.clone(),
Some(FieldValue::Boolean(true)) => "[x]".to_string(),
Some(FieldValue::Boolean(false)) => "[ ]".to_string(),
Some(FieldValue::Choice(s)) => s.clone(),
Some(FieldValue::Choices(v)) => v.join(", "),
None => String::new(),
}
}
}