(meta: &ParseNestedMeta)
| 92 | parser!(parse_required_full, Required); |
| 93 | |
| 94 | pub 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 | |
| 151 | pub fn parse_range(meta: &ParseNestedMeta) -> Result<Range, syn::Error> { |
no outgoing calls
no test coverage detected