Files
crank/crates/crank-core/src/workspace.rs
T
github-ops ba29ac7b94
Deploy / deploy (push) Successful in 2m44s
CI / Rust Checks (push) Successful in 5m31s
CI / UI Checks (push) Successful in 5s
CI / Deployment Manifests (push) Successful in 2s
CI / Frontend E2E (push) Successful in 4m24s
chore: publish clean community baseline
2026-06-19 16:45:51 +00:00

76 lines
2.3 KiB
Rust

use serde::{Deserialize, Serialize};
use serde_json::Value;
use time::OffsetDateTime;
use crate::ids::WorkspaceId;
#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum WorkspaceStatus {
Active,
Archived,
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct Workspace {
pub id: WorkspaceId,
pub slug: String,
pub display_name: String,
pub status: WorkspaceStatus,
pub settings: Value,
#[serde(with = "time::serde::rfc3339")]
pub created_at: OffsetDateTime,
#[serde(with = "time::serde::rfc3339")]
pub updated_at: OffsetDateTime,
}
#[cfg(test)]
mod tests {
use serde_json::json;
use time::{OffsetDateTime, format_description::well_known::Rfc3339};
use super::{Workspace, WorkspaceStatus};
use crate::ids::WorkspaceId;
#[test]
fn workspace_serializes_timestamps_as_rfc3339() {
let workspace = Workspace {
id: WorkspaceId::new("ws_01"),
slug: "primary".to_owned(),
display_name: "Primary".to_owned(),
status: WorkspaceStatus::Active,
settings: json!({"region":"eu"}),
created_at: OffsetDateTime::parse("2026-03-25T12:00:00Z", &Rfc3339).unwrap(),
updated_at: OffsetDateTime::parse("2026-03-25T12:05:00Z", &Rfc3339).unwrap(),
};
let value = serde_json::to_value(&workspace).unwrap();
assert_eq!(value["created_at"], json!("2026-03-25T12:00:00Z"));
assert_eq!(value["updated_at"], json!("2026-03-25T12:05:00Z"));
}
#[test]
fn workspace_deserializes_timestamps_from_rfc3339() {
let workspace: Workspace = serde_json::from_value(json!({
"id": "ws_01",
"slug": "primary",
"display_name": "Primary",
"status": "active",
"settings": {"region":"eu"},
"created_at": "2026-03-25T12:00:00Z",
"updated_at": "2026-03-25T12:05:00Z"
}))
.unwrap();
assert_eq!(
workspace.created_at,
OffsetDateTime::parse("2026-03-25T12:00:00Z", &Rfc3339).unwrap()
);
assert_eq!(
workspace.updated_at,
OffsetDateTime::parse("2026-03-25T12:05:00Z", &Rfc3339).unwrap()
);
}
}