cratestack_axum/idempotency/
parse.rs1use cratestack_core::CoolError;
4
5pub fn parse_idempotency_key(headers: &http::HeaderMap) -> Result<Option<String>, CoolError> {
8 let Some(value) = headers.get("idempotency-key") else {
9 return Ok(None);
10 };
11 let raw = value
12 .to_str()
13 .map_err(|_| CoolError::BadRequest("Idempotency-Key must be ASCII".to_owned()))?
14 .trim();
15 if raw.is_empty() {
16 return Err(CoolError::BadRequest(
17 "Idempotency-Key must not be empty".to_owned(),
18 ));
19 }
20 if raw.len() > 255 {
21 return Err(CoolError::BadRequest(
22 "Idempotency-Key must be at most 255 characters".to_owned(),
23 ));
24 }
25 Ok(Some(raw.to_owned()))
26}