use serde_valid::Validate;
mod issue54 {
use super::*;
#[test]
fn test_enum_valians_works() {
#[derive(Validate)]
enum Works {
VariantB(),
VariantA,
}
assert!(Works::VariantA.validate().is_ok());
assert!(Works::VariantB().validate().is_ok());
}
#[test]
fn test_enum_valiant_fied_case() {
#[derive(Validate)]
enum Fails {
VariantA,
VariantB(),
}
assert!(Fails::VariantA.validate().is_ok());
assert!(Fails::VariantB().validate().is_ok());
}
}
mod issue107 {
use serde::{Deserialize, Serialize};
use serde_valid::Validate;
use std::collections::HashSet;
#[allow(unused_variables)]
#[derive(Debug, PartialEq, Deserialize, Serialize, Validate)]
#[serde(untagged)]
pub enum WhiteList {
List {
#[validate(min_length = 1)]
white_type: String,
#[allow(unused_variables)]
list: HashSet<String>,
},
}
#[test]
fn test_issue_107_named_fields() {
let white_list = WhiteList::List {
white_type: "ip".to_string(),
list: vec!["127.0.0.1".to_string(), "192.168.1.1".to_string()]
.into_iter()
.collect(),
};
assert!(white_list.validate().is_ok());
}
#[test]
fn test_issue_107_named_fields_validation_error() {
let white_list = WhiteList::List {
white_type: "".to_string(),
list: vec!["127.0.0.1".to_string()].into_iter().collect(),
};
assert!(white_list.validate().is_err());
}
#[derive(Debug, PartialEq, Deserialize, Serialize, Validate)]
#[serde(untagged)]
pub enum DataEnum {
Unnamed(#[validate(minimum = 0)] i32, String),
}
#[test]
fn test_issue_107_unnamed_fields() {
let data = DataEnum::Unnamed(5, "test".to_string());
assert!(data.validate().is_ok());
}
#[test]
fn test_issue_107_unnamed_fields_validation_error() {
let data = DataEnum::Unnamed(-1, "test".to_string());
assert!(data.validate().is_err());
}
#[derive(Debug, PartialEq, Deserialize, Serialize, Validate)]
pub enum MultiVariant {
Variant1 {
#[validate(maximum = 100)]
validated_field: i32,
unvalidated_field: String,
},
Variant2 {
field1: String,
#[validate(minimum = 0)]
field2: i32,
field3: bool,
},
Variant3(#[validate(min_length = 1)] String, i32, bool),
}
#[test]
fn test_issue_107_multi_variant() {
let v1 = MultiVariant::Variant1 {
validated_field: 50,
unvalidated_field: "test".to_string(),
};
assert!(v1.validate().is_ok());
let v2 = MultiVariant::Variant2 {
field1: "test".to_string(),
field2: 10,
field3: true,
};
assert!(v2.validate().is_ok());
let v3 = MultiVariant::Variant3("test".to_string(), 10, false);
assert!(v3.validate().is_ok());
}
#[test]
fn test_issue_107_multi_variant_validation_error() {
let v1 = MultiVariant::Variant1 {
validated_field: 150,
unvalidated_field: "test".to_string(),
};
assert!(v1.validate().is_err());
let v2 = MultiVariant::Variant2 {
field1: "test".to_string(),
field2: -10,
field3: true,
};
assert!(v2.validate().is_err());
let v3 = MultiVariant::Variant3("".to_string(), 10, false);
assert!(v3.validate().is_err());
}
}