Skip to content

Rust newtype sanitization & validation

License

Notifications You must be signed in to change notification settings

michaelni678/seventy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

121 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Seventy

Rust newtype sanitization & validation

docs.rs     crates.io     github

Seventy is a simple newtype sanitizer and validator.

  • Why newtypes?

    Newtypes provide compile-time guarantees that your program is using the correct values by wrapping existing types.

  • Why sanitize?

    Newtypes are sanitized during construction, ensuring the values conform to the formats you expect.

  • Why validate?

    Newtypes are validated during construction, ensuring it's impossible to create a newtype with values that don't meet the defined rules.

There is no error handling. If you need to know why the newtype couldn't be created, this crate isn't for you.

Usage

The example below first trims the string and then validates if the trimmed string is both alphanumeric and between 5 to 20 characters long. The display upgrade automatically implements the Display trait.

use seventy::{
    builtins::{compare::*, string::*},
    seventy, Newtype,
};

#[seventy(
    upgrades(display),
    sanitize(trim),
    validate(alphanumeric, length::chars(within(5..=20))),
)]
pub struct Username(String);

assert_eq!(
    Username::try_new("   username   ").unwrap().into_inner(),
    "username"
);

assert!(Username::try_new("   u$ername   ").is_err());

See the examples directory for more!

About

Rust newtype sanitization & validation

Resources

License

Stars

Watchers

Forks

Languages