diff options
author | Lars Wirzenius <liw@liw.fi> | 2023-01-07 11:37:57 +0200 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2023-01-07 11:37:57 +0200 |
commit | b164f69c45db556a87020d85dbbaa48f1e2e1392 (patch) | |
tree | 06f62bbe6e3bfe49b7fff4dc6132bedac0ef13ef | |
parent | 36a1408747110cf87340fd554a0c32d38e77b8f6 (diff) | |
download | riki-b164f69c45db556a87020d85dbbaa48f1e2e1392.tar.gz |
refactor: move RikiError::UnknownTimestamp to src/time.rs
Sponsored-by: author
-rw-r--r-- | src/directive/meta.rs | 2 | ||||
-rw-r--r-- | src/directive/mod.rs | 3 | ||||
-rw-r--r-- | src/error.rs | 6 | ||||
-rw-r--r-- | src/time.rs | 13 |
4 files changed, 16 insertions, 8 deletions
diff --git a/src/directive/meta.rs b/src/directive/meta.rs index 7524bef..974a955 100644 --- a/src/directive/meta.rs +++ b/src/directive/meta.rs @@ -32,7 +32,7 @@ impl DirectiveImplementation for Meta { meta.set_title(title.into()); } if let Some(mtime) = &self.date { - meta.set_mtime(parse_timestamp(mtime).map_err(|e| DirectiveError::Riki(Box::new(e)))?); + meta.set_mtime(parse_timestamp(mtime)?); } Ok(Processed::Markdown("".into())) } diff --git a/src/directive/mod.rs b/src/directive/mod.rs index 4edda32..006e334 100644 --- a/src/directive/mod.rs +++ b/src/directive/mod.rs @@ -29,6 +29,9 @@ pub enum DirectiveError { PageSpec(#[from] crate::pagespec::PageSpecError), #[error(transparent)] + Time(#[from] crate::time::TimeError), + + #[error(transparent)] Riki(#[from] Box<crate::error::RikiError>), } diff --git a/src/error.rs b/src/error.rs index 7d5d2b5..845f08d 100644 --- a/src/error.rs +++ b/src/error.rs @@ -21,15 +21,15 @@ pub enum RikiError { #[error(transparent)] Parser(#[from] crate::parser::ParserError), + #[error(transparent)] + Time(#[from] crate::time::TimeError), + #[error("string formatting error: {0}")] Format(#[source] std::fmt::Error), #[error("link to missing page {1} on {0}")] PageMissing(PathBuf, PathBuf), - #[error("failed to parse date: {0:?}")] - UnknownTimestamp(String), - #[error("failed to process page {0}")] PageProblem(PathBuf, #[source] Box<Self>), diff --git a/src/time.rs b/src/time.rs index 98256b1..a9f3502 100644 --- a/src/time.rs +++ b/src/time.rs @@ -1,4 +1,3 @@ -use crate::error::RikiError; use log::trace; use std::time::{Duration, SystemTime}; use time::{ @@ -9,7 +8,13 @@ use time::{ OffsetDateTime, PrimitiveDateTime, }; -pub fn parse_timestamp(timestamp: &str) -> Result<SystemTime, RikiError> { +#[derive(Debug, thiserror::Error)] +pub enum TimeError { + #[error("failed to parse date: {0:?}")] + UnknownTimestamp(String), +} + +pub fn parse_timestamp(timestamp: &str) -> Result<SystemTime, TimeError> { trace!("parsing timestamp {:?}", timestamp); let odt = parse(timestamp)?; let unix = odt.unix_timestamp(); @@ -24,7 +29,7 @@ fn system_time(unix: i64) -> SystemTime { SystemTime::UNIX_EPOCH.checked_add(offset).unwrap() } -fn parse(timestamp: &str) -> Result<OffsetDateTime, RikiError> { +fn parse(timestamp: &str) -> Result<OffsetDateTime, TimeError> { const SIMPLIFIED_ISO9601: &[FormatItem<'static>] = format_description!("[year]-[month]-[day] [hour]:[minute]:[second]"); const SIMPLIFIED_ISO9601_MIN: &[FormatItem<'static>] = @@ -51,7 +56,7 @@ fn parse(timestamp: &str) -> Result<OffsetDateTime, RikiError> { } else if let Ok(t) = parse_one_time_format(timestamp, "RFC2822", &Rfc2822) { Ok(t) } else { - Err(RikiError::UnknownTimestamp(timestamp.into())) + Err(TimeError::UnknownTimestamp(timestamp.into())) } } |