mirror of
https://github.com/YGGverse/ggemini.git
synced 2026-03-31 17:15:31 +00:00
39 lines
1,011 B
Rust
39 lines
1,011 B
Rust
pub mod error;
|
|
pub mod gemini;
|
|
pub mod titan;
|
|
|
|
pub use error::Error;
|
|
pub use gemini::Gemini;
|
|
pub use titan::Titan;
|
|
|
|
use gio::NetworkAddress;
|
|
|
|
/// Single `Request` implementation for different protocols
|
|
pub enum Request {
|
|
Gemini(Gemini),
|
|
Titan(Titan),
|
|
}
|
|
|
|
impl Request {
|
|
// Getters
|
|
|
|
/// Get [NetworkAddress](https://docs.gtk.org/gio/class.NetworkAddress.html) for `Self`
|
|
pub fn to_network_address(&self, default_port: u16) -> Result<NetworkAddress, Error> {
|
|
let uri = match self {
|
|
Self::Gemini(ref request) => request.uri.clone(),
|
|
Self::Titan(ref request) => request.uri.clone(),
|
|
};
|
|
let port = uri.port();
|
|
match crate::gio::network_address::from_uri(
|
|
&uri,
|
|
if port.is_positive() {
|
|
port as u16
|
|
} else {
|
|
default_port
|
|
},
|
|
) {
|
|
Ok(network_address) => Ok(network_address),
|
|
Err(e) => Err(Error::NetworkAddress(e)),
|
|
}
|
|
}
|
|
}
|