Compare start/end time.
This commit is contained in:
@@ -23,7 +23,10 @@ use crate::error::Res;
|
||||
use crate::parser::util::get_consumed;
|
||||
use crate::types::Date;
|
||||
use crate::types::DayOfMonth;
|
||||
use crate::types::Hour;
|
||||
use crate::types::Minute;
|
||||
use crate::types::Month;
|
||||
use crate::types::Time;
|
||||
use crate::types::Timestamp;
|
||||
use crate::types::TimestampRangeType;
|
||||
use crate::types::TimestampType;
|
||||
@@ -67,6 +70,8 @@ fn diary_timestamp<'b, 'g, 'r, 's>(
|
||||
range_type: TimestampRangeType::None,
|
||||
start: None,
|
||||
end: None,
|
||||
start_time: None, // TODO
|
||||
end_time: None, // TODO
|
||||
},
|
||||
))
|
||||
}
|
||||
@@ -113,7 +118,7 @@ fn active_timestamp<'b, 'g, 'r, 's>(
|
||||
exit_matcher: &active_time_rest_end,
|
||||
});
|
||||
let time_context = context.with_additional_node(&time_context);
|
||||
let (remaining, _time) =
|
||||
let (remaining, time) =
|
||||
opt(tuple((space1, parser_with_context!(time)(&time_context))))(remaining)?;
|
||||
let (remaining, _repeater) =
|
||||
opt(tuple((space1, parser_with_context!(repeater)(context))))(remaining)?;
|
||||
@@ -135,6 +140,8 @@ fn active_timestamp<'b, 'g, 'r, 's>(
|
||||
range_type: TimestampRangeType::None,
|
||||
start: Some(start.clone()),
|
||||
end: Some(start),
|
||||
start_time: time.as_ref().map(|(_, time)| time.clone()),
|
||||
end_time: time.map(|(_, time)| time),
|
||||
},
|
||||
))
|
||||
}
|
||||
@@ -151,7 +158,7 @@ fn inactive_timestamp<'b, 'g, 'r, 's>(
|
||||
exit_matcher: &inactive_time_rest_end,
|
||||
});
|
||||
let time_context = context.with_additional_node(&time_context);
|
||||
let (remaining, _time) =
|
||||
let (remaining, time) =
|
||||
opt(tuple((space1, parser_with_context!(time)(&time_context))))(remaining)?;
|
||||
let (remaining, _repeater) =
|
||||
opt(tuple((space1, parser_with_context!(repeater)(context))))(remaining)?;
|
||||
@@ -173,6 +180,8 @@ fn inactive_timestamp<'b, 'g, 'r, 's>(
|
||||
range_type: TimestampRangeType::None,
|
||||
start: Some(start.clone()),
|
||||
end: Some(start),
|
||||
start_time: time.as_ref().map(|(_, time)| time.clone()),
|
||||
end_time: time.map(|(_, time)| time),
|
||||
},
|
||||
))
|
||||
}
|
||||
@@ -199,6 +208,8 @@ fn active_date_range_timestamp<'b, 'g, 'r, 's>(
|
||||
range_type: TimestampRangeType::DateRange,
|
||||
start: first_timestamp.start,
|
||||
end: second_timestamp.end,
|
||||
start_time: first_timestamp.start_time,
|
||||
end_time: second_timestamp.end_time,
|
||||
},
|
||||
))
|
||||
}
|
||||
@@ -220,10 +231,10 @@ fn active_time_range_timestamp<'b, 'g, 'r, 's>(
|
||||
exit_matcher: &time_range_rest_end,
|
||||
});
|
||||
let first_time_context = time_context.with_additional_node(&first_time_context);
|
||||
let (remaining, _first_time) =
|
||||
let (remaining, (_, first_time)) =
|
||||
tuple((space1, parser_with_context!(time)(&first_time_context)))(remaining)?;
|
||||
let (remaining, _) = tag("-")(remaining)?;
|
||||
let (remaining, _second_time) = parser_with_context!(time)(&time_context)(remaining)?;
|
||||
let (remaining, second_time) = parser_with_context!(time)(&time_context)(remaining)?;
|
||||
let (remaining, _repeater) =
|
||||
opt(tuple((space1, parser_with_context!(repeater)(context))))(remaining)?;
|
||||
let (remaining, _warning_delay) = opt(tuple((
|
||||
@@ -244,6 +255,8 @@ fn active_time_range_timestamp<'b, 'g, 'r, 's>(
|
||||
range_type: TimestampRangeType::None,
|
||||
start: Some(start_date.clone()),
|
||||
end: Some(start_date),
|
||||
start_time: Some(first_time),
|
||||
end_time: Some(second_time),
|
||||
},
|
||||
))
|
||||
}
|
||||
@@ -271,6 +284,8 @@ fn inactive_date_range_timestamp<'b, 'g, 'r, 's>(
|
||||
range_type: TimestampRangeType::DateRange,
|
||||
start: first_timestamp.start,
|
||||
end: second_timestamp.end,
|
||||
start_time: first_timestamp.start_time,
|
||||
end_time: second_timestamp.end_time,
|
||||
},
|
||||
))
|
||||
}
|
||||
@@ -292,10 +307,10 @@ fn inactive_time_range_timestamp<'b, 'g, 'r, 's>(
|
||||
exit_matcher: &time_range_rest_end,
|
||||
});
|
||||
let first_time_context = time_context.with_additional_node(&first_time_context);
|
||||
let (remaining, _first_time) =
|
||||
let (remaining, (_, first_time)) =
|
||||
tuple((space1, parser_with_context!(time)(&first_time_context)))(remaining)?;
|
||||
let (remaining, _) = tag("-")(remaining)?;
|
||||
let (remaining, _second_time) = parser_with_context!(time)(&time_context)(remaining)?;
|
||||
let (remaining, second_time) = parser_with_context!(time)(&time_context)(remaining)?;
|
||||
let (remaining, _repeater) =
|
||||
opt(tuple((space1, parser_with_context!(repeater)(context))))(remaining)?;
|
||||
let (remaining, _warning_delay) = opt(tuple((
|
||||
@@ -316,6 +331,8 @@ fn inactive_time_range_timestamp<'b, 'g, 'r, 's>(
|
||||
range_type: TimestampRangeType::None,
|
||||
start: Some(start_date.clone()),
|
||||
end: Some(start_date),
|
||||
start_time: Some(first_time),
|
||||
end_time: Some(second_time),
|
||||
},
|
||||
))
|
||||
}
|
||||
@@ -389,16 +406,23 @@ fn dayname_end<'b, 'g, 'r, 's>(
|
||||
fn time<'b, 'g, 'r, 's>(
|
||||
context: RefContext<'b, 'g, 'r, 's>,
|
||||
input: OrgSource<'s>,
|
||||
) -> Res<OrgSource<'s>, OrgSource<'s>> {
|
||||
let (remaining, _hour) = verify(digit1, |hour: &OrgSource<'_>| {
|
||||
) -> Res<OrgSource<'s>, Time<'s>> {
|
||||
let (remaining, hour) = verify(digit1, |hour: &OrgSource<'_>| {
|
||||
hour.len() >= 1 && hour.len() <= 2
|
||||
})(input)?;
|
||||
let (remaining, _) = tag(":")(remaining)?;
|
||||
let (remaining, _minute) =
|
||||
let (remaining, minute) =
|
||||
verify(digit1, |minute: &OrgSource<'_>| minute.len() == 2)(remaining)?;
|
||||
let (remaining, _time_rest) = opt(parser_with_context!(time_rest)(context))(remaining)?;
|
||||
let source = get_consumed(input, remaining);
|
||||
Ok((remaining, source))
|
||||
|
||||
let hour = Hour::new(Into::<&str>::into(hour))
|
||||
.expect("TODO: I should be able to return CustomError from nom parsers.");
|
||||
let minute = Minute::new(Into::<&str>::into(minute))
|
||||
.expect("TODO: I should be able to return CustomError from nom parsers.");
|
||||
let time = Time::new(hour, minute, _time_rest.map(Into::<&str>::into))
|
||||
.expect("TODO: I should be able to return CustomError from nom parsers.");
|
||||
|
||||
Ok((remaining, time))
|
||||
}
|
||||
|
||||
#[cfg_attr(feature = "tracing", tracing::instrument(ret, level = "debug"))]
|
||||
|
||||
Reference in New Issue
Block a user