diff --git a/README.md b/README.md index fbfe119..6ea0832 100644 --- a/README.md +++ b/README.md @@ -53,10 +53,8 @@ use ggemini::client::{ fn main() -> ExitCode { Client::new().request_async( - Request::Gemini( - Gemini::build( - Uri::parse("gemini://geminiprotocol.net/", UriFlags::NONE).unwrap() - ) + Request::gemini( + Uri::parse(REQUEST, UriFlags::NONE).unwrap(), ), Priority::DEFAULT, Cancellable::new(), diff --git a/src/client/connection/request.rs b/src/client/connection/request.rs index adbefe0..df64d16 100644 --- a/src/client/connection/request.rs +++ b/src/client/connection/request.rs @@ -7,6 +7,7 @@ pub use gemini::Gemini; pub use titan::Titan; use gio::NetworkAddress; +use glib::Uri; /// Single `Request` implementation for different protocols pub enum Request { @@ -15,6 +16,23 @@ pub enum Request { } impl Request { + // Constructors + + /// Create new `Self` for [Gemini protocol](https://geminiprotocol.net) + pub fn gemini(uri: Uri) -> Self { + Self::Gemini(Gemini { uri }) + } + + /// Create new `Self` for [Titan protocol](gemini://transjovian.org/titan/page/The%20Titan%20Specification) + pub fn titan(uri: Uri, mime: String, token: Option, data: Vec) -> Self { + Self::Titan(Titan { + uri, + mime, + token, + data, + }) + } + // Getters /// Get [NetworkAddress](https://docs.gtk.org/gio/class.NetworkAddress.html) for `Self` diff --git a/src/client/connection/request/gemini.rs b/src/client/connection/request/gemini.rs index 4887499..78ec59b 100644 --- a/src/client/connection/request/gemini.rs +++ b/src/client/connection/request/gemini.rs @@ -6,13 +6,6 @@ pub struct Gemini { } impl Gemini { - // Constructors - - /// Build valid new `Self` - pub fn build(uri: Uri) -> Self { - Self { uri } // @TODO validate - } - // Getters /// Copy `Self` to [Bytes](https://docs.gtk.org/glib/struct.Bytes.html) diff --git a/src/client/connection/request/titan.rs b/src/client/connection/request/titan.rs index 9f9dfd3..6d1c781 100644 --- a/src/client/connection/request/titan.rs +++ b/src/client/connection/request/titan.rs @@ -9,18 +9,6 @@ pub struct Titan { } impl Titan { - // Constructors - - /// Build valid new `Self` - pub fn build(uri: Uri, mime: String, token: Option, data: Vec) -> Self { - Self { - uri, - mime, - token, - data, - } // @TODO validate - } - // Getters /// Copy `Self` to [Bytes](https://docs.gtk.org/glib/struct.Bytes.html) diff --git a/tests/integration.rs b/tests/integration.rs index aa0aaaa..7755a6a 100644 --- a/tests/integration.rs +++ b/tests/integration.rs @@ -1,15 +1,18 @@ use gio::*; use glib::*; -use ggemini::client::connection::request::Gemini; +use ggemini::client::connection::Request; #[test] -fn client_connection_request_gemini_build() { +fn client_connection_request_gemini() { const REQUEST: &str = "gemini://geminiprotocol.net/"; - - let request = Gemini::build(Uri::parse(REQUEST, UriFlags::NONE).unwrap()); - - assert_eq!(&request.uri.to_string(), REQUEST); + assert_eq!( + &match Request::gemini(Uri::parse(REQUEST, UriFlags::NONE).unwrap()) { + Request::Gemini(request) => request.uri.to_string(), + Request::Titan(_) => panic!(), + }, + REQUEST + ); } // @TODO