serde_valid 2.0.1

JSON Schema based validation tool using serde.
Documentation
#[cfg(feature = "fluent")]
mod tests {
    use fluent::{FluentBundle, FluentResource};
    use serde::Deserialize;
    use serde_json::json;
    use serde_valid::{fluent::Localize, Validate};
    use unic_langid::LanguageIdentifier;

    fn get_bundle(source: impl Into<String>) -> FluentBundle<FluentResource> {
        let res = FluentResource::try_new(source.into()).expect("Failed to parse an FTL string.");

        let langid_en: LanguageIdentifier = "en-US".parse().expect("Parsing failed");
        let mut bundle = FluentBundle::new(vec![langid_en]);
        bundle.add_resource(res).unwrap();

        bundle
    }

    #[test]
    fn fluent_error() {
        #[derive(Debug, Deserialize, Validate)]
        struct Test {
            #[validate(minimum = 5, fluent("hello-world"))]
            a: u32,
            #[validate(maximum = 10, fluent("intro", name = "taro"))]
            b: u32,
        }

        let test = Test { a: 1, b: 11 };
        let a = test.validate().unwrap_err().localize(&get_bundle(
            ["hello-world = Hello, world!", "intro = Welcome, { $name }."].join("\n"),
        ));

        assert_eq!(
            a.to_string(),
            json!({
                "errors": [],
                "properties": {
                    "a": {
                        "errors": [
                            "Hello, world!"
                        ]
                    },
                    "b": {
                        "errors": [
                            "Welcome, \u{2068}taro\u{2069}."
                        ]
                    }
                }
            })
            .to_string()
        );
    }
}