cinputs 0.2.5

Crate that simplifies the constraining of inputs
Documentation
use std::io::Cursor;

use cinputs::{cread_stream, prelude::*, read_stream};

#[test]
fn test_string_input() {
    assert_eq!(456, string_input::<u32>(&String::from("456")).unwrap());
    assert_eq!(-20, string_input::<i8>(&String::from("-20")).unwrap());
    assert!(string_input::<u8>(&String::from("257")).is_err());
    assert!(string_input::<u8>(&String::from("-45")).is_err());
}

#[test]
fn test_cstring_input() {
    let constraint = StringConstraint {
        exclude_char: vec!['y', 'i', 'e'],
        include_char: vec!['u', 'j', '2'],
        max_len: 10,
        min_len: 5,
    };
    assert!(cstring_input(&String::from("uj2gl"), &constraint).is_ok());
    assert!(cstring_input(&String::from("u2gljYY"), &constraint).is_ok());

    assert!(cstring_input(&String::from("uj2gil"), &constraint).is_err());
    assert!(cstring_input(&String::from("u5555555"), &constraint).is_err());
    assert!(cstring_input(&String::from("uj2"), &constraint).is_err());
    assert!(cstring_input(&String::from("uj2ooooooo0"), &constraint).is_err());
}

#[test]
fn test_read_stream() {
    let string = String::from("-78");
    assert!(read_stream::<_, u8>(Cursor::new(string.clone())).is_err());
    assert!(read_stream::<_, i8>(Cursor::new(string.clone())).is_ok());
}

#[test]
fn test_cread_stream() {
    let constraint = StringConstraint {
        exclude_char: vec!['y', 'i', 'e'],
        include_char: vec!['u', 'j', '2'],
        max_len: 10,
        min_len: 5,
    };
    assert!(
        cread_stream::<_, String, _>(Cursor::new(String::from("uj2gil")), &constraint).is_err()
    );
    assert!(
        cread_stream::<_, String, _>(Cursor::new(String::from("u2gljYY")), &constraint).is_ok()
    );
}

#[test]
fn test_number_constraint() {
    let number_constraint = NumberConstraint {
        min_value: -20.0,
        max_value: 500.0,
    };
    assert!(number_constraint.validate(&50).is_ok());
    assert!(number_constraint.validate(&500).is_ok());
    assert!(number_constraint.validate(&-20).is_ok());
    assert!(number_constraint.validate(&-20.4).is_err());
    assert!(number_constraint.validate(&500.2).is_err());
}

#[test]
fn test_string_constraint() {
    let string_constraint = StringConstraint {
        exclude_char: vec!['a', 'b', 'c', 'd'],
        include_char: vec!['e', 'f', 'g', 'h'],
        max_len: 10,
        min_len: 5,
    };
    assert!(string_constraint.validate(&"efghb".to_string()).is_err());
    assert!(string_constraint.validate(&"efgh".to_string()).is_err());
    assert!(string_constraint
        .validate(&"efgh8888888888".to_string())
        .is_err());
    assert!(string_constraint.validate(&"efgh6".to_string()).is_ok());
    assert!(string_constraint.validate(&"efgh777".to_string()).is_ok());
}