apollo-errors-derive 0.4.0

Proc macro for deriving apollo-errors::Error trait
Documentation
//! HTTP status code attribute parsing

use syn::{Attribute, Result};

/// Parse #[http_status(code)] attribute
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)
}