diff --git a/.gitea/workflows/tag_release.yaml b/.gitea/workflows/tag_release.yaml index 6a11acb..b4106cc 100644 --- a/.gitea/workflows/tag_release.yaml +++ b/.gitea/workflows/tag_release.yaml @@ -19,7 +19,7 @@ jobs: - name: Install Rust uses: actions-rs/toolchain@v1 with: - toolchain: 1.85.0 + toolchain: 1.86.0 components: cargo - name: Extract Version from Cargo.toml diff --git a/.gitea/workflows/workflow.yaml b/.gitea/workflows/workflow.yaml index cf14ef2..ac7c0a1 100644 --- a/.gitea/workflows/workflow.yaml +++ b/.gitea/workflows/workflow.yaml @@ -18,7 +18,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions-rust-lang/setup-rust-toolchain@v1 with: - toolchain: 1.85.0 + toolchain: 1.86.0 - run: cargo check test: @@ -28,7 +28,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions-rust-lang/setup-rust-toolchain@v1 with: - toolchain: 1.85.0 + toolchain: 1.86.0 - run: cargo test fmt: @@ -38,7 +38,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions-rust-lang/setup-rust-toolchain@v1 with: - toolchain: 1.85.0 + toolchain: 1.86.0 - run: rustup component add rustfmt - run: cargo fmt --all -- --check @@ -49,7 +49,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions-rust-lang/setup-rust-toolchain@v1 with: - toolchain: 1.85.0 + toolchain: 1.86.0 - run: rustup component add clippy - run: cargo clippy -- -D warnings @@ -60,7 +60,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions-rust-lang/setup-rust-toolchain@v1 with: - toolchain: 1.85.0 + toolchain: 1.86.0 - run: cargo build diff --git a/Cargo.toml b/Cargo.toml index 585bb1e..261f79b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,8 @@ [package] name = "icarus_models" -version = "0.3.0" +version = "0.4.0" edition = "2024" +rust-version = "1.86" description = "models used for the icarus project" license = "MIT" @@ -9,6 +10,7 @@ license = "MIT" serde = { version = "1.0.218", features = ["derive"] } serde_json = { version = "1.0.139" } rand = { version = "0.9" } +time = { version = "0.3.41", features = ["formatting", "macros", "parsing", "serde"] } uuid = { version = "1.16.0", features = ["v4", "serde"] } [dev-dependencies] tempfile = { version = "3.19.1" } diff --git a/src/user.rs b/src/user.rs index 6efeb3c..5095618 100644 --- a/src/user.rs +++ b/src/user.rs @@ -21,12 +21,14 @@ pub struct User { #[serde(skip_serializing_if = "String::is_empty")] pub lastname: String, pub email_verified: bool, - #[serde(skip_serializing_if = "String::is_empty")] - pub date_created: String, + #[serde(with = "time::serde::rfc3339::option")] + pub date_created: Option, #[serde(skip_serializing_if = "String::is_empty")] pub status: String, - #[serde(skip_serializing_if = "String::is_empty")] - pub last_login: String, + #[serde(with = "time::serde::rfc3339::option")] + pub last_login: Option, + #[serde(skip_serializing_if = "init::is_uuid_nil")] + pub salt_id: uuid::Uuid, } impl Default for User { @@ -40,9 +42,10 @@ impl Default for User { firstname: String::new(), lastname: String::new(), email_verified: false, - date_created: String::new(), + date_created: None, status: String::new(), - last_login: String::new(), + last_login: None, + salt_id: uuid::Uuid::nil(), } } } @@ -56,3 +59,29 @@ impl User { } } } + +pub mod salt { + use std::default::Default; + + use crate::init; + + use serde::{Deserialize, Serialize}; + + #[derive(Clone, Debug, Default, Deserialize, Serialize)] + pub struct Salt { + #[serde(skip_serializing_if = "init::is_uuid_nil")] + pub id: uuid::Uuid, + #[serde(skip_serializing_if = "String::is_empty")] + pub salt: String, + } + + impl Salt { + pub fn to_json(&self, output_pretty: bool) -> Result { + if output_pretty { + serde_json::to_string_pretty(&self) + } else { + serde_json::to_string(&self) + } + } + } +}