gateryx 0.1.6

Secure HTTP gateway for IoT and Industrial applications
Documentation
use http::HeaderName;
use serde::Deserialize;

use crate::{Error, Result};

fn default_jwt_assertion() -> String {
    "X-JWT-Assertion".to_string()
}

fn default_user() -> String {
    "X-Gateryx-User".to_string()
}

fn default_real_ip() -> String {
    "X-Real-IP".to_string()
}

fn default_via() -> String {
    "Via".to_string()
}

fn default_authorization() -> String {
    "X-Gateryx-Authorization".to_string()
}

#[derive(Deserialize, Clone)]
#[serde(deny_unknown_fields)]
pub struct Headers {
    #[serde(default = "default_jwt_assertion")]
    jwt_assertion: String,
    #[serde(default = "default_user")]
    user: String,
    #[serde(default = "default_real_ip")]
    real_ip: String,
    #[serde(default = "default_authorization")]
    authorization: String,
    #[serde(default = "default_via")]
    via: String,
}

impl Default for Headers {
    fn default() -> Self {
        Headers {
            jwt_assertion: default_jwt_assertion(),
            user: default_user(),
            real_ip: default_real_ip(),
            authorization: default_authorization(),
            via: default_via(),
        }
    }
}

impl TryFrom<Headers> for WebHeaders {
    type Error = Error;

    fn try_from(value: Headers) -> Result<Self> {
        Ok(WebHeaders {
            jwt_assertion: HeaderName::from_bytes(value.jwt_assertion.as_bytes())
                .map_err(Error::invalid_data)?,
            user: HeaderName::from_bytes(value.user.as_bytes()).map_err(Error::invalid_data)?,
            real_ip: HeaderName::from_bytes(value.real_ip.as_bytes())
                .map_err(Error::invalid_data)?,
            authorization: HeaderName::from_bytes(value.authorization.as_bytes())
                .map_err(Error::invalid_data)?,
            via: HeaderName::from_bytes(value.via.as_bytes()).map_err(Error::invalid_data)?,
        })
    }
}

pub struct WebHeaders {
    pub jwt_assertion: HeaderName,
    pub user: HeaderName,
    pub real_ip: HeaderName,
    pub authorization: HeaderName,
    pub via: HeaderName,
}