use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct TenantContext {
pub tenant_id: String,
}
impl TenantContext {
pub fn new(tenant_id: impl Into<String>) -> Self {
Self {
tenant_id: tenant_id.into(),
}
}
pub fn id(&self) -> &str {
&self.tenant_id
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum OperationMode {
DryRun,
Validation,
Sync,
Audit,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum OutputFormat {
Text,
Json,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_tenant_context() {
let tenant = TenantContext::new("tenant_123");
assert_eq!(tenant.id(), "tenant_123");
assert_eq!(tenant.tenant_id, "tenant_123");
}
#[test]
fn test_tenant_context_serialization() {
let tenant = TenantContext::new("tenant_123");
let json = serde_json::to_string(&tenant).unwrap();
let deserialized: TenantContext = serde_json::from_str(&json).unwrap();
assert_eq!(tenant, deserialized);
}
#[test]
fn test_tenant_context_hash() {
let tenant1 = TenantContext::new("tenant_123");
let tenant2 = TenantContext::new("tenant_123");
let tenant3 = TenantContext::new("tenant_456");
use std::collections::HashSet;
let mut set = HashSet::new();
set.insert(tenant1.clone());
set.insert(tenant2.clone());
assert_eq!(set.len(), 1);
set.insert(tenant3);
assert_eq!(set.len(), 2); }
}