titanite 0.3.0

Client/Server Library for Gemini protocol with Titan support
Documentation
use anyhow::Result;
use url::Url;

/// [Gemini](https://geminiprotocol.net/docs/protocol-specification.gmi) request
pub struct Gemini {
    pub url: Url,
}

impl Gemini {
    pub fn from_bytes(buffer: &[u8]) -> Result<Self> {
        use crate::tool::Header;
        Ok(Self {
            url: Url::parse(std::str::from_utf8(buffer.header_bytes()?)?)?,
        })
    }
    pub fn into_bytes(self) -> Vec<u8> {
        format!("{}\r\n", self.url).into_bytes()
    }
}

#[test]
fn test() {
    const REQUEST: &[u8] = "gemini://geminiprotocol.net\r\n".as_bytes();
    let request = Gemini::from_bytes(REQUEST).unwrap();
    assert_eq!(request.url.as_str(), "gemini://geminiprotocol.net");
    assert_eq!(request.into_bytes(), REQUEST);
}