diff --git a/Cargo.lock b/Cargo.lock index c1bd5ed..9a658cf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -187,6 +187,15 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "convert_case" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", +] + [[package]] name = "core-foundation" version = "0.9.4" @@ -440,6 +449,18 @@ dependencies = [ "serde", ] +[[package]] +name = "enum_stringify" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9ff9e4dbfa8fb0fd68ff9e4da874ad10774af372f0e2b8d1649c63026434d37" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "envconfig" version = "0.11.0" @@ -714,6 +735,7 @@ dependencies = [ "diesel-async", "diesel-derive-enum", "dotenvy", + "enum_stringify", "envconfig", "serde", "teloxide", @@ -2438,6 +2460,12 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + [[package]] name = "unicode-xid" version = "0.2.6" diff --git a/Cargo.toml b/Cargo.toml index 5ee90ef..23a9fa1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,6 +10,7 @@ diesel = { version = "2.2.8", features = ["postgres"] } diesel-async = { version = "0.5.2", features = ["bb8", "postgres"] } diesel-derive-enum = "2.1.0" dotenvy = "0.15.7" +enum_stringify = "0.6.3" envconfig = "0.11.0" serde = { version = "1.0.219", features = ["derive", "serde_derive"] } teloxide = { version = "0.14.0", features = ["macros", "postgres-storage-nativetls"] } diff --git a/src/db.rs b/src/db.rs index c908ca0..85917c8 100644 --- a/src/db.rs +++ b/src/db.rs @@ -9,6 +9,24 @@ use diesel_async::pooled_connection::bb8::Pool; use diesel_async::pooled_connection::AsyncDieselConnectionManager; use diesel_async::AsyncPgConnection; use diesel_async::RunQueryDsl; +use enum_stringify::EnumStringify; + +#[derive(EnumStringify)] +#[enum_stringify(case = "flat")] +pub enum ReservationStatus { + Booked, + Paid, +} + +pub trait GetReservationStatus { + fn get_status(&self) -> Option; +} + +impl GetReservationStatus for models::Reservation { + fn get_status(&self) -> Option { + ReservationStatus::try_from(self.status.clone()).ok() + } +} #[derive(Clone)] pub struct DB {