1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
|
use garde::Validate;
use super::util;
#[derive(Debug, Validate)]
struct Struct<'a> {
#[garde(url)]
field: &'a str,
#[garde(inner(url))]
inner: &'a [&'a str],
}
#[derive(Debug, Validate)]
struct Tuple<'a>(#[garde(url)] &'a str);
#[derive(Debug, Validate)]
enum Enum<'a> {
Unit,
Struct {
#[garde(url)]
field: &'a str,
#[garde(dive)]
v: Struct<'a>,
},
Tuple(#[garde(url)] &'a str),
}
#[test]
fn url_valid() {
util::check_ok(
&[
Struct {
field: "http://info.cern.ch/hypertext/WWW/TheProject.html",
inner: &["http://info.cern.ch/hypertext/WWW/TheProject.html"],
},
Struct {
field: "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
inner: &["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],
},
],
&(),
)
}
#[test]
fn url_tuple_valid() {
util::check_ok(&[Tuple("https://www.youtube.com/watch?v=dQw4w9WgXcQ")], &())
}
#[test]
fn url_enum_valid() {
util::check_ok(
&[
Enum::Unit,
Enum::Struct {
field: "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
v: Struct {
field: "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
inner: &["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],
},
},
Enum::Tuple("https://www.youtube.com/watch?v=dQw4w9WgXcQ"),
],
&(),
)
}
#[test]
fn url_invalid() {
util::check_fail!(
&[Struct {
field: "asdf",
inner: &["asdf"]
}],
&()
)
}
#[test]
fn url_tuple_invalid() {
util::check_fail!(
&[Tuple("htt ps://www.youtube.com/watch?v=dQw4w9WgXcQ")],
&()
)
}
#[test]
fn url_enum_invalid() {
util::check_fail!(
&[
Enum::Struct {
field: "htt ps://www.youtube.com/watch?v=dQw4w9WgXcQ",
v: Struct {
field: "htt ps://www.youtube.com/watch?v=dQw4w9WgXcQ",
inner: &["htt ps://www.youtube.com/watch?v=dQw4w9WgXcQ"],
},
},
Enum::Tuple("htt ps://www.youtube.com/watch?v=dQw4w9WgXcQ"),
],
&(),
)
}
#[test]
fn url_valid_wrapper() {
let value = Struct {
field: "htt ps://www.youtube.com/watch?v=dQw4w9WgXcQ",
inner: &["htt ps://www.youtube.com/watch?v=dQw4w9WgXcQ"],
};
println!("{:?}", value.validate().unwrap_err());
}
|