MCPcopy Create free account
hub / github.com/biblius/validify / parse_length

Function parse_length

validify_derive/src/validate/parser.rs:94–149  ·  view source on GitHub ↗
(meta: &ParseNestedMeta)

Source from the content-addressed store, hash-verified

92parser!(parse_required_full, Required);
93
94pub fn parse_length(meta: &ParseNestedMeta) -> Result<Length, syn::Error> {
95 let mut validation = Length::default();
96
97 meta.parse_nested_meta(|meta| {
98 if meta.path.is_ident("min") {
99 let content = meta.value()?;
100 match content.parse::<LitInt>() {
101 Ok(lit) => validation.min = Some(ValueOrPath::Value(lit.base10_parse::<u64>()?)),
102 Err(_) => match content.parse::<syn::Path>() {
103 Ok(path) => validation.min = Some(ValueOrPath::Path(path)),
104 Err(_) => {
105 return Err(meta.error("Length parameter must be an int literal or path"))
106 }
107 },
108 }
109 return Ok(());
110 }
111
112 if meta.path.is_ident("max") {
113 let content = meta.value()?;
114 match content.parse::<LitInt>() {
115 Ok(lit) => validation.max = Some(ValueOrPath::Value(lit.base10_parse::<u64>()?)),
116 Err(_) => match content.parse::<syn::Path>() {
117 Ok(path) => validation.max = Some(ValueOrPath::Path(path)),
118 Err(_) => {
119 return Err(meta.error("Length parameter must be an int literal or path"))
120 }
121 },
122 }
123 return Ok(());
124 }
125
126 if meta.path.is_ident("equal") {
127 let content = meta.value()?;
128 if validation.max.is_some() || validation.min.is_some() {
129 return Err(meta.error("equal parameter cannot be set if max or min exist"));
130 }
131 match content.parse::<LitInt>() {
132 Ok(lit) => validation.equal = Some(ValueOrPath::Value(lit.base10_parse::<u64>()?)),
133 Err(_) => match content.parse::<syn::Path>() {
134 Ok(path) => validation.equal = Some(ValueOrPath::Path(path)),
135 Err(_) => {
136 return Err(meta.error("Length parameter must be an int literal or path"))
137 }
138 },
139 }
140 return Ok(());
141 }
142
143 code_and_message!(validation, meta);
144
145 Err(meta.error("Unrecognized length parameter"))
146 })?;
147
148 Ok(validation)
149}
150
151pub fn parse_range(meta: &ParseNestedMeta) -> Result<Range, syn::Error> {

Callers 1

parse_single_validationFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected