use thiserror::Error;
pub type BrightDateValue = f64;
pub type Precision = u8;
#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
pub struct BrightDateOptions {
pub precision: Option<Precision>,
pub use_tai: Option<bool>,
}
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct BrightDateComponents {
pub day: i64,
pub fraction: f64,
pub value: f64,
pub millidays: u32,
pub microdays: u32,
pub nanodays: u32,
}
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct BrightDuration {
pub days: f64,
pub millidays: f64,
pub microdays: f64,
pub nanodays: f64,
}
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct FormattedBrightDate {
pub full: String,
pub day: String,
pub fraction: String,
pub friendly: String,
}
#[derive(Debug, Error, Clone, PartialEq)]
pub enum BrightDateError {
#[error("invalid or non-finite input: {0}")]
InvalidInput(String),
#[error("parse error: {0}")]
ParseError(String),
#[error("invalid number: {0}")]
InvalidNumber(String),
#[error("invalid precision: {0}")]
InvalidPrecision(String),
#[error("out of range: {0}")]
OutOfRange(String),
#[error("invalid GPS week: {0}")]
InvalidGpsWeek(String),
#[error("invalid GPS seconds: {0}")]
InvalidGpsSeconds(String),
}