11 releases

0.3.4 Apr 10, 2021
0.3.3 Feb 28, 2021
0.2.2 Feb 21, 2021
0.1.2 Feb 20, 2021

#22 in #email-validation

Download history 329/week @ 2025-08-18 511/week @ 2025-08-25 472/week @ 2025-09-01 460/week @ 2025-09-08 636/week @ 2025-09-15 712/week @ 2025-09-22 1369/week @ 2025-09-29 1203/week @ 2025-10-06 722/week @ 2025-10-13 727/week @ 2025-10-20 711/week @ 2025-10-27 548/week @ 2025-11-03 433/week @ 2025-11-10 448/week @ 2025-11-17 418/week @ 2025-11-24 485/week @ 2025-12-01

1,837 downloads per month
Used in 4 crates (via playwright)

MIT license

29KB
636 lines

STRONG   crates.io MIT

Strongly typed String for Rust

Rust is a statically and strongly typed systems programming language. We can create a new type wrapping primitives.

struct Age(i32);
struct Email(String);

There is a problem here, there are two types of strings in Rust, and it is hard to create strong types for both String and &str.

STRONG provides two types owned StrongBuf and unsized Strong.

use strong::{validators::Email, Strong, StrongBuf, Validator};

fn login(email: &Strong<Email>, password: &Strong<Password>) { .. }

let email: StrongBuf<Email> = ..
let password: StrongBuf<Password> = ..
login(&email, &password);

Email requires some_validators feature.

Getting Started

use strong::{validators::Email, Strong, StrongBuf, Validator};

enum Password {}
impl Validator for Password {
    type Err = std::convert::Infallible;
}

let email: StrongBuf<Email> = StrongBuf::<Email>::validate("a@example.com".into()).unwrap();
let password: &Strong<Password> = Strong::<Password>::validate("b").unwrap();

Shorthand

With shorthand feature, Str and S are exported and can be substituted for StrongBuf and Strong.

let email: StrongBuf<Email> = StrongBuf::validate("foo".to_string()).unwrap();
let email: Str<Email> = Str::validate("foo".to_string()).unwrap();

License

Licensed under MIT license (LICENSE-MIT or https://opensource.org/licenses/MIT)

Contributing

welcome!

Dependencies

~0–2MB
~39K SLoC