(meta: &ParseNestedMeta)
| 389 | } |
| 390 | |
| 391 | pub fn parse_time(meta: &ParseNestedMeta) -> Result<Time, syn::Error> { |
| 392 | const INTERVALS: [&str; 5] = ["seconds", "minutes", "hours", "days", "weeks"]; |
| 393 | |
| 394 | let mut validation = Time::default(); |
| 395 | |
| 396 | meta.parse_nested_meta(|meta| { |
| 397 | if meta.path.is_ident("op") { |
| 398 | let content = meta.value()?; |
| 399 | match content.parse::<syn::Ident>() { |
| 400 | Ok(id) => { |
| 401 | validation.op = id.to_string().into(); |
| 402 | if matches!(validation.op, TimeOp::None) { |
| 403 | return Err(meta.error( |
| 404 | "op must be a path corresponding to one of the time validation functions" |
| 405 | )) |
| 406 | } |
| 407 | }, |
| 408 | Err(_) => return Err(meta.error( |
| 409 | "op must be a path corresponding to one of the time validation functions" |
| 410 | )), |
| 411 | } |
| 412 | return Ok(()); |
| 413 | } |
| 414 | |
| 415 | if meta.path.is_ident("target") { |
| 416 | let content = meta.value()?; |
| 417 | match content.parse::<LitStr>() { |
| 418 | Ok(date) => { |
| 419 | if date.value().is_empty() { |
| 420 | return Err(meta.error("target cannot be empty")); |
| 421 | } |
| 422 | validation.target = Some(ValueOrPath::Value(date.value())) |
| 423 | }, |
| 424 | Err(_) => match content.parse::<syn::Path>() { |
| 425 | Ok(path) => { |
| 426 | validation.target = Some(ValueOrPath::Path(path)) |
| 427 | }, |
| 428 | Err(e) => { |
| 429 | return Err( |
| 430 | meta.error(format!("target must be a path or a string literal: {e}")) |
| 431 | ) |
| 432 | } |
| 433 | }, |
| 434 | } |
| 435 | return Ok(()); |
| 436 | } |
| 437 | |
| 438 | if meta.path.is_ident("format") { |
| 439 | let content = meta.value()?; |
| 440 | match content.parse::<LitStr>() { |
| 441 | Ok(format) => { |
| 442 | if format.value().is_empty() { |
| 443 | return Err(meta.error("format cannot be empty")); |
| 444 | } |
| 445 | validation.format = Some(format.value()) |
| 446 | }, |
| 447 | Err(_) => return Err(meta.error("format must be a string literal")) |
| 448 | } |
no test coverage detected