diff options
| author | joeac <me@joeac.net> | 2026-01-17 17:17:50 +0000 |
|---|---|---|
| committer | joeac <me@joeac.net> | 2026-01-17 17:17:50 +0000 |
| commit | bf74f305894bde98033932235a4210c7d6865adf (patch) | |
| tree | 051422c97fcb5d7c2eafd426ea66e1a906948747 /transformers/actualbudget_transformer/actualbudget_models | |
| parent | fe85652e4d3e8906824baddaafd05d19105579b8 (diff) | |
| parent | f69ec8416c4e6301dcfa06791b025785d7f61b6b (diff) | |
Merge pull request 'random-stuff' (#4) from random-stuff into main
Reviewed-on: https://git.joeac.net/joeac/schist/pulls/4
Diffstat (limited to 'transformers/actualbudget_transformer/actualbudget_models')
| -rw-r--r-- | transformers/actualbudget_transformer/actualbudget_models/src/actualbudget_date.rs | 51 |
1 files changed, 44 insertions, 7 deletions
diff --git a/transformers/actualbudget_transformer/actualbudget_models/src/actualbudget_date.rs b/transformers/actualbudget_transformer/actualbudget_models/src/actualbudget_date.rs index 13525fc..d8b6e87 100644 --- a/transformers/actualbudget_transformer/actualbudget_models/src/actualbudget_date.rs +++ b/transformers/actualbudget_transformer/actualbudget_models/src/actualbudget_date.rs @@ -1,8 +1,14 @@ -use diesel::{backend::Backend, deserialize::{FromSql, FromSqlRow}, expression::AsExpression, sql_types::Integer, sqlite::Sqlite}; +use diesel::{ + backend::Backend, + deserialize::{FromSql, FromSqlRow}, + expression::AsExpression, + sql_types::Integer, + sqlite::Sqlite, +}; -#[derive(Clone, Hash, PartialEq, Eq, Debug, AsExpression, FromSqlRow)] +#[derive(Clone, Copy, Hash, PartialEq, Eq, Debug, AsExpression, FromSqlRow)] #[diesel(sql_type=Integer)] -pub struct ActualbudgetDate(i32); +pub struct ActualbudgetDate(i64); #[derive(Clone, PartialOrd, PartialEq, Eq)] enum DatePart { @@ -17,7 +23,12 @@ enum DatePart { impl ActualbudgetDate { pub fn to_iso(&self) -> String { - format!("{0}-{1}-{2}T00:00:00.000Z", self.year(), self.month(), self.day()) + format!( + "{0}-{1}-{2}T00:00:00.000Z", + self.year(), + self.month(), + self.day() + ) } pub fn to_iso_date(&self) -> String { @@ -40,7 +51,20 @@ impl ActualbudgetDate { } pub fn from_i32(i: i32) -> Self { - ActualbudgetDate(i) + ActualbudgetDate(i.into()) + } + + pub fn from_ymd<T, S, U>(year: T, month: S, day: U) -> Self + where + T: Into<i64>, + S: Into<i64>, + U: Into<i64>, + { + Self(year.into() * 10_000 + month.into() * 100 + day.into()) + } + + pub fn oldest_valid_date() -> Self { + Self(10000101) } fn date_part(&self) -> DatePart { @@ -51,7 +75,7 @@ impl ActualbudgetDate { } } - fn dayified_value(&self) -> i32 { + fn dayified_value(&self) -> i64 { match self.date_part() { DatePart::DayOfMonth => self.0, DatePart::MonthOfYear => self.0 * 100 + 1, @@ -74,6 +98,19 @@ impl PartialOrd for ActualbudgetDate { impl FromSql<Integer, Sqlite> for ActualbudgetDate { fn from_sql(bytes: <Sqlite as Backend>::RawValue<'_>) -> diesel::deserialize::Result<Self> { let int: i32 = FromSql::<Integer, Sqlite>::from_sql(bytes)?; - Ok(ActualbudgetDate(int)) + Ok(ActualbudgetDate(int.into())) + } +} + +#[cfg(test)] +mod test { + use crate::ActualbudgetDate; + + #[test] + fn when_from_ymd_2026_01_16_then_constructs_2026_01_16() { + let actualbudget_date = ActualbudgetDate::from_ymd(2026, 1, 16); + assert_eq!(actualbudget_date.year(), "2026"); + assert_eq!(actualbudget_date.month(), "01"); + assert_eq!(actualbudget_date.day(), "16"); } } |
