Skip to content

Commit ced645a

Browse files
committed
Make helpers timezone-generic
1 parent d75338a commit ced645a

File tree

1 file changed

+17
-9
lines changed

1 file changed

+17
-9
lines changed

src/parse_relative_time.rs

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// For the full copyright and license information, please view the LICENSE
22
// file that was distributed with this source code.
33
use crate::ParseDateTimeError;
4-
use chrono::{DateTime, Days, Duration, Months, Utc};
4+
use chrono::{DateTime, Days, Duration, Months, TimeZone, Utc};
55
use regex::Regex;
66
/// Parses a relative time string and returns a `Duration` representing the
77
/// relative time.
@@ -58,10 +58,10 @@ pub fn parse_relative_time(s: &str) -> Result<Duration, ParseDateTimeError> {
5858
/// This function will return `Err(ParseDateTimeError::InvalidInput)` if the input string
5959
/// cannot be parsed as a relative time.
6060
/// ```
61-
fn parse_relative_time_at_date(
62-
mut datetime: DateTime<Utc>,
61+
fn parse_relative_time_at_date<T: TimeZone>(
62+
mut datetime: DateTime<T>,
6363
s: &str,
64-
) -> Result<DateTime<Utc>, ParseDateTimeError> {
64+
) -> Result<DateTime<T>, ParseDateTimeError> {
6565
let time_pattern: Regex = Regex::new(
6666
r"(?x)
6767
(?:(?P<value>[-+]?\d*)\s*)?
@@ -146,7 +146,11 @@ fn parse_relative_time_at_date(
146146
}
147147
}
148148

149-
fn add_months(datetime: DateTime<Utc>, months: i64, mut is_ago: bool) -> Option<DateTime<Utc>> {
149+
fn add_months<T: TimeZone>(
150+
datetime: DateTime<T>,
151+
months: i64,
152+
mut is_ago: bool,
153+
) -> Option<DateTime<T>> {
150154
let months = if months < 0 {
151155
is_ago = !is_ago;
152156
u32::try_from(-months).ok()?
@@ -160,7 +164,11 @@ fn add_months(datetime: DateTime<Utc>, months: i64, mut is_ago: bool) -> Option<
160164
}
161165
}
162166

163-
fn add_days(datetime: DateTime<Utc>, days: i64, mut is_ago: bool) -> Option<DateTime<Utc>> {
167+
fn add_days<T: TimeZone>(
168+
datetime: DateTime<T>,
169+
days: i64,
170+
mut is_ago: bool,
171+
) -> Option<DateTime<T>> {
164172
let days = if days < 0 {
165173
is_ago = !is_ago;
166174
u64::try_from(-days).ok()?
@@ -174,11 +182,11 @@ fn add_days(datetime: DateTime<Utc>, days: i64, mut is_ago: bool) -> Option<Date
174182
}
175183
}
176184

177-
fn add_duration(
178-
datetime: DateTime<Utc>,
185+
fn add_duration<T: TimeZone>(
186+
datetime: DateTime<T>,
179187
duration: Duration,
180188
is_ago: bool,
181-
) -> Option<DateTime<Utc>> {
189+
) -> Option<DateTime<T>> {
182190
let duration = if is_ago { -duration } else { duration };
183191
datetime.checked_add_signed(duration)
184192
}

0 commit comments

Comments
 (0)