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

Function parse_time

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

Source from the content-addressed store, hash-verified

389}
390
391pub 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 }

Callers 1

parse_single_validationFunction · 0.85

Calls 2

is_emptyMethod · 0.80
assertMethod · 0.80

Tested by

no test coverage detected