use super::MemoryRepositoryError;
use serde::{Deserialize, Serialize};
pub const MEMORY_NAMESPACE_CHANGE_TOKEN_PROFILE_V1: &str =
"a3s.memory.namespace-change-token.sequence.v1";
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct MemoryNamespaceChangeToken {
profile: String,
sequence: u64,
}
impl MemoryNamespaceChangeToken {
pub fn new(sequence: u64) -> Self {
Self {
profile: MEMORY_NAMESPACE_CHANGE_TOKEN_PROFILE_V1.to_string(),
sequence,
}
}
pub fn profile(&self) -> &str {
&self.profile
}
pub fn sequence(&self) -> u64 {
self.sequence
}
pub fn verify(&self) -> Result<(), MemoryRepositoryError> {
if self.profile != MEMORY_NAMESPACE_CHANGE_TOKEN_PROFILE_V1 {
return Err(MemoryRepositoryError::invariant(
"namespace change token uses an unsupported profile",
));
}
Ok(())
}
}