#![cfg(feature = "forms")] use std::borrow::Cow; use mendes::forms::{form, ToField, ToForm}; use serde::{Deserialize, Serialize}; #[test] fn test_generate() { let form = SomeForm::to_form(); let form = form.set("name", "hi").unwrap(); let html = form.to_string(); assert!(!html.contains("skipped")); } #[test] fn test_roundtrip() { let obj = SomeForm { skipped: 0, name: "name".into(), amount: 1, rate: 2.0, byte: 3, test: true, options: Options::Straight, #[cfg(feature = "chrono")] date: chrono::Utc::now().date_naive(), }; let s = serde_urlencoded::to_string(&obj).unwrap(); let decoded = serde_urlencoded::from_bytes(s.as_bytes()).unwrap(); assert_eq!(obj, decoded); } #[allow(dead_code)] #[form(action = "/assets/new", submit = "Create")] #[derive(Debug, Deserialize, Serialize, PartialEq)] struct SomeForm<'a> { #[form(skip)] skipped: u8, name: Cow<'a, str>, amount: u32, rate: f32, byte: u8, #[form(item = "Group")] test: bool, #[form(item = "Group")] options: Options, #[cfg(feature = "chrono")] date: chrono::NaiveDate, } #[derive(Debug, Deserialize, Serialize, ToField, PartialEq)] enum Options { Straight, #[option(label = "Relabeled")] Labeled, }