(input: &str)
| 836 | } |
| 837 | |
| 838 | fn dom_expr(input: &str) -> IResult<&str, DayOfMonthExpr> { |
| 839 | let dom = map_digit1::<DayOfMonth>(); |
| 840 | |
| 841 | let (input, start) = opt(alt((char('*'), char('L'))))(input)?; |
| 842 | match start { |
| 843 | Some('*') => { |
| 844 | let (input, maybe_step) = opt(tuple((char('/'), step_digit::<DayOfMonth>())))(input)?; |
| 845 | |
| 846 | if let Some((_, step)) = maybe_step { |
| 847 | let exprs = Exprs::new(OrsExpr::Step { |
| 848 | start: DayOfMonth(1), |
| 849 | end: ExprValue::max(), |
| 850 | step, |
| 851 | }); |
| 852 | |
| 853 | let (input, exprs) = tail_ors_exprs(input, dom, exprs)?; |
| 854 | Ok((input, DayOfMonthExpr::Many(exprs))) |
| 855 | } else { |
| 856 | Ok((input, DayOfMonthExpr::All)) |
| 857 | } |
| 858 | } |
| 859 | Some('L') => { |
| 860 | let (input, modifier) = opt(alt((char('-'), char('W'))))(input)?; |
| 861 | match modifier { |
| 862 | Some('-') => { |
| 863 | let offset = map_digit1::<DayOfMonthOffset>(); |
| 864 | let (input, (offset, weekday)) = tuple((offset, opt(char('W'))))(input)?; |
| 865 | |
| 866 | if weekday.is_some() { |
| 867 | Ok((input, DayOfMonthExpr::Last(Last::OffsetWeekday(offset)))) |
| 868 | } else { |
| 869 | Ok((input, DayOfMonthExpr::Last(Last::Offset(offset)))) |
| 870 | } |
| 871 | } |
| 872 | Some('W') => Ok((input, DayOfMonthExpr::Last(Last::Weekday))), |
| 873 | _ => Ok((input, DayOfMonthExpr::Last(Last::Day))), |
| 874 | } |
| 875 | } |
| 876 | _ => { |
| 877 | let (input, day) = dom(input)?; |
| 878 | |
| 879 | let (input, maybe_char) = opt(alt((char('W'), char('-'), char('/'))))(input)?; |
| 880 | match maybe_char { |
| 881 | Some('W') => Ok((input, DayOfMonthExpr::ClosestWeekday(day))), |
| 882 | Some('-') => { |
| 883 | let (input, (end, slash)) = tuple((&dom, opt(char('/'))))(input)?; |
| 884 | |
| 885 | let (input, exprs) = if slash.is_none() { |
| 886 | (input, Exprs::new(OrsExpr::Range(day, end))) |
| 887 | } else { |
| 888 | let (input, step) = step_digit::<DayOfMonth>()(input)?; |
| 889 | ( |
| 890 | input, |
| 891 | Exprs::new(OrsExpr::Step { |
| 892 | start: day, |
| 893 | end, |
| 894 | step, |
| 895 | }), |
nothing calls this directly
no test coverage detected
searching dependent graphs…