summaryrefslogtreecommitdiff
path: root/transformers/actualbudget_transformer/actualbudget_models
diff options
context:
space:
mode:
authorjoeac <me@joeac.net>2026-01-17 17:17:50 +0000
committerjoeac <me@joeac.net>2026-01-17 17:17:50 +0000
commitbf74f305894bde98033932235a4210c7d6865adf (patch)
tree051422c97fcb5d7c2eafd426ea66e1a906948747 /transformers/actualbudget_transformer/actualbudget_models
parentfe85652e4d3e8906824baddaafd05d19105579b8 (diff)
parentf69ec8416c4e6301dcfa06791b025785d7f61b6b (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.rs51
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");
}
}