From fecbbff18fa0e28411263d93e32e4b188b519697 Mon Sep 17 00:00:00 2001 From: yggverse Date: Mon, 13 Jan 2025 21:52:12 +0200 Subject: [PATCH] implement `to_network_address` method --- src/client.rs | 10 ++-------- src/client/connection/request.rs | 23 +++++++++++++++++++++++ src/client/connection/request/error.rs | 16 ++++++++++++++++ src/client/error.rs | 6 +----- 4 files changed, 42 insertions(+), 13 deletions(-) create mode 100644 src/client/connection/request/error.rs diff --git a/src/client.rs b/src/client.rs index c92077a..ec54d51 100644 --- a/src/client.rs +++ b/src/client.rs @@ -65,13 +65,7 @@ impl Client { // Begin new connection // * [NetworkAddress](https://docs.gtk.org/gio/class.NetworkAddress.html) required for valid // [SNI](https://geminiprotocol.net/docs/protocol-specification.gmi#server-name-indication) - match crate::gio::network_address::from_uri( - &match request { - Request::Gemini(ref request) => request.uri.clone(), - Request::Titan(ref request) => request.uri.clone(), - }, - crate::DEFAULT_PORT, - ) { + match request.to_network_address() { Ok(network_address) => { self.socket .connect_async(&network_address.clone(), Some(&cancellable.clone()), { @@ -112,7 +106,7 @@ impl Client { } }) } - Err(e) => callback(Err(Error::NetworkAddress(e))), + Err(e) => callback(Err(Error::Request(e))), } } diff --git a/src/client/connection/request.rs b/src/client/connection/request.rs index 5986f7b..71ec63c 100644 --- a/src/client/connection/request.rs +++ b/src/client/connection/request.rs @@ -1,10 +1,33 @@ +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` holder for different protocols pub enum Request { Gemini(Gemini), Titan(Titan), } + +impl Request { + // Getters + + /// Convert `Self` to [NetworkAddress](https://docs.gtk.org/gio/class.NetworkAddress.html) + pub fn to_network_address(&self) -> Result { + match crate::gio::network_address::from_uri( + &match self { + Request::Gemini(ref request) => request.uri.clone(), + Request::Titan(ref request) => request.uri.clone(), + }, + crate::DEFAULT_PORT, + ) { + Ok(network_address) => Ok(network_address), + Err(e) => Err(Error::NetworkAddress(e)), + } + } +} diff --git a/src/client/connection/request/error.rs b/src/client/connection/request/error.rs new file mode 100644 index 0000000..5524960 --- /dev/null +++ b/src/client/connection/request/error.rs @@ -0,0 +1,16 @@ +use std::fmt::{Display, Formatter, Result}; + +#[derive(Debug)] +pub enum Error { + NetworkAddress(crate::gio::network_address::error::Error), +} + +impl Display for Error { + fn fmt(&self, f: &mut Formatter) -> Result { + match self { + Self::NetworkAddress(e) => { + write!(f, "Network Address error: {e}") + } + } + } +} diff --git a/src/client/error.rs b/src/client/error.rs index 0ebb3c3..6083e77 100644 --- a/src/client/error.rs +++ b/src/client/error.rs @@ -4,8 +4,7 @@ use std::fmt::{Display, Formatter, Result}; pub enum Error { Connect(glib::Error), Connection(crate::client::connection::Error), - NetworkAddress(crate::gio::network_address::Error), - Request(glib::Error), + Request(crate::client::connection::request::Error), } impl Display for Error { @@ -17,9 +16,6 @@ impl Display for Error { Self::Connect(e) => { write!(f, "Connect error: {e}") } - Self::NetworkAddress(e) => { - write!(f, "Network address error: {e}") - } Self::Request(e) => { write!(f, "Request error: {e}") }