summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2023-01-07 11:37:57 +0200
committerLars Wirzenius <liw@liw.fi>2023-01-07 11:37:57 +0200
commitb164f69c45db556a87020d85dbbaa48f1e2e1392 (patch)
tree06f62bbe6e3bfe49b7fff4dc6132bedac0ef13ef
parent36a1408747110cf87340fd554a0c32d38e77b8f6 (diff)
downloadriki-b164f69c45db556a87020d85dbbaa48f1e2e1392.tar.gz
refactor: move RikiError::UnknownTimestamp to src/time.rs
Sponsored-by: author
-rw-r--r--src/directive/meta.rs2
-rw-r--r--src/directive/mod.rs3
-rw-r--r--src/error.rs6
-rw-r--r--src/time.rs13
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()))
}
}