mirror of
https://github.com/YGGverse/titanite.git
synced 2026-03-31 09:05:31 +00:00
hold parsed, valid url for gemini request
This commit is contained in:
parent
7264d935be
commit
25e3ebb243
2 changed files with 6 additions and 7 deletions
|
|
@ -12,3 +12,4 @@ repository = "https://github.com/YGGverse/titanite"
|
|||
[dependencies]
|
||||
anyhow = "1.0.96"
|
||||
regex = "1.11.1"
|
||||
url = "2.5.4"
|
||||
|
|
|
|||
|
|
@ -1,21 +1,19 @@
|
|||
use anyhow::Result;
|
||||
use url::Url;
|
||||
|
||||
/// [Gemini](https://geminiprotocol.net/docs/protocol-specification.gmi) request
|
||||
pub struct Gemini {
|
||||
pub url: String,
|
||||
pub url: Url,
|
||||
}
|
||||
|
||||
impl Gemini {
|
||||
pub fn from_bytes(buffer: &[u8]) -> Result<Self> {
|
||||
Ok(Self {
|
||||
url: String::from_utf8(crate::request::header_bytes(buffer)?.to_vec())?,
|
||||
url: Url::parse(std::str::from_utf8(crate::request::header_bytes(buffer)?)?)?,
|
||||
})
|
||||
}
|
||||
pub fn into_bytes(self) -> Vec<u8> {
|
||||
let mut bytes = Vec::with_capacity(self.url.len() + 2);
|
||||
bytes.extend(self.url.into_bytes());
|
||||
bytes.extend(b"\r\n");
|
||||
bytes
|
||||
format!("{}\r\n", self.url).into_bytes()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -23,6 +21,6 @@ impl Gemini {
|
|||
fn test() {
|
||||
const REQUEST: &[u8] = "gemini://geminiprotocol.net\r\n".as_bytes();
|
||||
let request = Gemini::from_bytes(REQUEST).unwrap();
|
||||
assert_eq!(request.url, "gemini://geminiprotocol.net");
|
||||
assert_eq!(request.url.as_str(), "gemini://geminiprotocol.net");
|
||||
assert_eq!(request.into_bytes(), REQUEST);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue