systemprompt_identifiers/
gateway_conversation.rs1use crate::error::IdValidationError;
10
11const PREFIX: &str = "ctx_";
12
13fn validate(value: &str) -> Result<(), IdValidationError> {
14 if value.len() != PREFIX.len() + 16 {
15 return Err(IdValidationError::invalid(
16 "GatewayConversationId",
17 "must be 'ctx_' followed by 16 hex characters",
18 ));
19 }
20 if !value.starts_with(PREFIX) {
21 return Err(IdValidationError::invalid(
22 "GatewayConversationId",
23 "missing 'ctx_' prefix",
24 ));
25 }
26 if !value[PREFIX.len()..]
27 .bytes()
28 .all(|b| b.is_ascii_digit() || (b'a'..=b'f').contains(&b))
29 {
30 return Err(IdValidationError::invalid(
31 "GatewayConversationId",
32 "suffix must be lowercase hex",
33 ));
34 }
35 Ok(())
36}
37
38crate::define_id!(GatewayConversationId, validated, schema, validate);
39
40impl GatewayConversationId {
41 #[must_use]
46 pub fn from_prefix_hash(hash: u64) -> Self {
47 Self::new(format!("{PREFIX}{hash:016x}"))
48 }
49}