use std::result; use std::path::PathBuf; use thiserror::Error; use chrono::NaiveDateTime; #[derive(Debug, Error)] pub enum Error { #[error("The subcommand '{0}' is not implemented")] UnimplementedCommand(String), #[error("Sqlite error: {0}")] Sqlite(#[from] rusqlite::Error), #[error("Could not find home directory or a place where configuration can be read an written :(")] NoHomeDir, #[error("The file {0} was not found")] FileNotFound(PathBuf), #[error("Error reading the file: {0}")] CouldntRead(PathBuf), #[error("Couldn't parse toml file at: {path}\nwith error: {error}")] TomlError{ path: PathBuf, error: toml::de::Error}, #[error("Couldn't parse yaml file at: {path}\nwith error: {error}")] YamlError{ path: PathBuf, error: serde_yaml::Error}, #[error("Could not understand '{0}' as a date format.")] DateTimeParseError(String), #[error("IOError: {0}")] IOError(#[from] std::io::Error), #[error("CSV Error: {0}")] CSVError(#[from] csv::Error), #[error("Corrupted data found in the database: {0}")] CorruptedData(String), #[error("Trying to parse {0} as a time in your timezone led to no results")] NoneLocalTime(String), #[error("Trying to parse {orig} as a time in your timezone led to the ambiguous results {t1} and {t2}")] AmbiguousLocalTime { orig: String, t1: NaiveDateTime, t2: NaiveDateTime, }, #[error("The provided regex '{0}' could not be parsed")] InvalidRegex(String), #[error("Could not understand '{0}' as a month specifier. Try 'this', 'last', or any month name like 'january' or 'nov'")] InvalidMonthSpec(String), #[error("An error ocurred while trying to read entries from the database. In the row with id {id} the data at column '{col}' has a value that is not a valid time. A valid time looks like this: '2021-07-12 19:35:43.645916' and must be in UTC timezone (unless you are using a database that was created by timetrap, case in which the times are in the local timezone). To fix this problem you can use t backend and manually update the value using good old SQL.")] InvalidTimeInDatabase { id: String, col: String, }, } pub type Result = result::Result;