use syn::{Attribute, Result};
pub(crate) fn parse_http_status(attrs: &[Attribute]) -> Result<Option<u16>> {
for attr in attrs {
if attr.path().is_ident("http_status") {
let lit: syn::LitInt = attr.parse_args()?;
let status: u16 = lit.base10_parse()?;
if let Err(e) = http::StatusCode::from_u16(status) {
return Err(syn::Error::new_spanned(
lit,
format!("invalid HTTP status code: {e}"),
));
}
return Ok(Some(status));
}
}
Ok(None)
}