use entid::{EntityId, Prefix, UlidIdentifier, Uuid, UuidIdentifier};
use serde::{Deserialize, Serialize};
struct ApiKey;
impl Prefix for ApiKey {
fn prefix() -> &'static str {
"key"
}
}
#[derive(Debug)]
struct Order;
impl Prefix for Order {
fn prefix() -> &'static str {
"order"
}
}
#[derive(Serialize, Deserialize, Debug)]
struct OrderRecord {
id: EntityId<Order, UlidIdentifier>,
customer_name: String,
amount: f64,
}
fn main() {
let namespace = Uuid::NAMESPACE_DNS;
let uuid1 = UuidIdentifier::new_v5(&namespace, "user@example.com");
let uuid2 = UuidIdentifier::new_v5(&namespace, "user@example.com");
let api_key1 = EntityId::<ApiKey, UuidIdentifier>::from_identifier(uuid1);
let api_key2 = EntityId::<ApiKey, UuidIdentifier>::from_identifier(uuid2);
println!("API Key 1: {}", api_key1);
println!("API Key 2: {}", api_key2);
println!("Keys are equal: {}", api_key1 == api_key2);
let order1 = EntityId::<Order, UlidIdentifier>::generate();
let ulid2 = UlidIdentifier::monotonic_from(Some(order1.identifier()));
let order2 = EntityId::<Order, UlidIdentifier>::from_identifier(ulid2);
println!("\nOrder 1: {}", order1);
println!("Order 2: {}", order2);
println!(
"Order 2 > Order 1: {}",
order2.identifier().ulid() > order1.identifier().ulid()
);
let order = OrderRecord {
id: EntityId::<Order, UlidIdentifier>::generate(),
customer_name: "John Doe".to_string(),
amount: 123.45,
};
let json = serde_json::to_string_pretty(&order).unwrap();
println!("\nSerialized Order:\n{}", json);
let deserialized: OrderRecord = serde_json::from_str(&json).unwrap();
println!("\nDeserialized Order: {:?}", deserialized);
println!("IDs match: {}", order.id == deserialized.id);
}