mirror of
https://github.com/deuxfleurs-org/garage.git
synced 2026-08-09 22:19:23 +00:00
`parse_duration` is no longer maintained upstream; `fundu-system` seems like the best option to provide most of the functionality provided by parse_duration and minimize deps. Fixes #1246 Dep diffstat: +3 -6 ## Caveats - I've done basically no testing of this PR beyond `cargo test` - See my comment in #1246 for regression risk; this is a breaking change. Is there a document I should update to make note of this? Should I rebase this for `next-v3` instead? - In theory CVE-2021-29932 is fixed by this PR as `fundu-systemd` doesn't support exponents, but I've done no verification that this is really the case beyond the info in #1246 Reviewed-on: https://git.deuxfleurs.fr/Deuxfleurs/garage/pulls/1468 Reviewed-by: Alex <lx@deuxfleurs.fr>
This commit is contained in:
@@ -22,6 +22,8 @@ arc-swap.workspace = true
|
||||
async-trait.workspace = true
|
||||
blake2.workspace = true
|
||||
bytesize.workspace = true
|
||||
fundu.workspace = true
|
||||
fundu-systemd.workspace = true
|
||||
thiserror.workspace = true
|
||||
hexdump.workspace = true
|
||||
xxhash-rust.workspace = true
|
||||
|
||||
+14
-1
@@ -1,6 +1,9 @@
|
||||
//! Module containing helper functions to manipulate time
|
||||
use chrono::{SecondsFormat, TimeZone, Utc};
|
||||
use std::time::{SystemTime, UNIX_EPOCH};
|
||||
use std::convert::TryInto;
|
||||
use std::time::{Duration, SystemTime, UNIX_EPOCH};
|
||||
|
||||
use crate::error::Error;
|
||||
|
||||
/// Returns milliseconds since UNIX Epoch
|
||||
pub fn now_msec() -> u64 {
|
||||
@@ -28,3 +31,13 @@ pub fn msec_to_rfc3339(msecs: u64) -> String {
|
||||
let timestamp = Utc.timestamp_opt(secs, nanos).unwrap();
|
||||
timestamp.to_rfc3339_opts(SecondsFormat::Millis, true)
|
||||
}
|
||||
|
||||
/// Parse a systemd-style duration using fundu
|
||||
pub fn parse_duration(s: &str) -> Result<Duration, Error> {
|
||||
fundu_systemd::parse(s, Some(fundu::TimeUnit::Second), None)
|
||||
.map_err(|err| Error::Message(err.to_string()))
|
||||
.and_then(|dur| {
|
||||
dur.try_into()
|
||||
.map_err(|err: fundu::TryFromDurationError| Error::Message(err.to_string()))
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user