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]
|
[dependencies]
|
||||||
anyhow = "1.0.96"
|
anyhow = "1.0.96"
|
||||||
regex = "1.11.1"
|
regex = "1.11.1"
|
||||||
|
url = "2.5.4"
|
||||||
|
|
|
||||||
|
|
@ -1,21 +1,19 @@
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
|
use url::Url;
|
||||||
|
|
||||||
/// [Gemini](https://geminiprotocol.net/docs/protocol-specification.gmi) request
|
/// [Gemini](https://geminiprotocol.net/docs/protocol-specification.gmi) request
|
||||||
pub struct Gemini {
|
pub struct Gemini {
|
||||||
pub url: String,
|
pub url: Url,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Gemini {
|
impl Gemini {
|
||||||
pub fn from_bytes(buffer: &[u8]) -> Result<Self> {
|
pub fn from_bytes(buffer: &[u8]) -> Result<Self> {
|
||||||
Ok(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> {
|
pub fn into_bytes(self) -> Vec<u8> {
|
||||||
let mut bytes = Vec::with_capacity(self.url.len() + 2);
|
format!("{}\r\n", self.url).into_bytes()
|
||||||
bytes.extend(self.url.into_bytes());
|
|
||||||
bytes.extend(b"\r\n");
|
|
||||||
bytes
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -23,6 +21,6 @@ impl Gemini {
|
||||||
fn test() {
|
fn test() {
|
||||||
const REQUEST: &[u8] = "gemini://geminiprotocol.net\r\n".as_bytes();
|
const REQUEST: &[u8] = "gemini://geminiprotocol.net\r\n".as_bytes();
|
||||||
let request = Gemini::from_bytes(REQUEST).unwrap();
|
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);
|
assert_eq!(request.into_bytes(), REQUEST);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue