bjorn-acme 0.3.2

Building blocks for an ACME server
Documentation
#[derive(Debug)]
pub struct LinkHeader {
    pub url: String,
    pub relative: bool,
    pub relation: String,
}

#[derive(Debug)]
pub struct LinksHeaders<R> {
    pub responder: R,
    pub links: Vec<(String, String)>,
}

impl<R> LinksHeaders<R> {
    pub fn new_links(responder: R, links: Vec<LinkHeader>, config: &crate::acme::Config) -> Self {
        let mut result = vec![];
        for link in links {
            let url = match link.relative {
                false => link.url,
                true => format!("{}{}", config.external_uri, link.url)
            };
            result.push((url, link.relation));
        }
        Self {
            responder,
            links: result
        }
    }
}

impl<'r, 'a: 'r, R: rocket::response::Responder<'r, 'a>> rocket::response::Responder<'r, 'a> for LinksHeaders<R> {
    fn respond_to(self, request: &'r rocket::request::Request<'_>) -> rocket::response::Result<'a> {
        let mut result = self.responder.respond_to(request)?;
        for (url, relation) in self.links {
            result.adjoin_raw_header("Link", format!("<{}>; rel=\"{}\"", url, relation));
        }
        Ok(result)
    }
}