#input-validation #validation #ergonomics #serde

valitron

Valitron is an ergonomics, functional and configurable validator

10 unstable releases (3 breaking)

new 0.4.0 Apr 19, 2024
0.3.0 Nov 9, 2023
0.2.4 Oct 26, 2023
0.2.1 Sep 27, 2023
0.0.1 Aug 26, 2023

#410 in Encoding

34 downloads per month

MIT/Apache

170KB
4.5K SLoC

Valitron is an ergonomics, functional and configurable validation

In the future, modularization will be supported

Inspired by axum

Features

  • Ergonomics validation
  • Build-in rule, e.g. Required, StartWith ...
  • Closure validate
  • Related validate, e.g. password confirm
  • Custom rule with other parameter
  • Check / modify input data
  • Custom error message type
  • Support different error types convert, it can use both build-in rules and custom error type simultaneously
  • Collect validate error messages
  • Support all types data on #[derive(Serialize, Deserialize)] ( visit serde for more info)

Examples

fn main() {
    let validator = Validator::new()
        .rule("name", Required.and(StartWith("hello")))
        .rule("age", custom(age_limit))
        .message([
            ("name.required", "name is required"),
            ("name.start_with", "name should be starts with `hello`"),
        ]);

    let person = Person {
        name: "li",
        age: 18,
    };

    let res = validator.validate(person);
    // or using trait
    let res = person.validate(validator);
}

fn age_limit(n: &mut u8) -> Result<(), Message> {
    if *n >= 25 && *n <= 45 {
        return Ok(());
    }
    Err("age should be between 25 and 45".into())
}

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Other

My English proficiency is limited. If you have a better representation in the document, welcome to PR.

Dependencies

~110–355KB