mirror of
https://github.com/YGGverse/ggemini.git
synced 2026-03-31 17:15:31 +00:00
draft request high-level api
This commit is contained in:
parent
015c3ad7ca
commit
9793a67187
12 changed files with 533 additions and 16 deletions
|
|
@ -1,23 +1,62 @@
|
|||
use gio::{prelude::SocketClientExt, SocketClient, SocketProtocol, TlsCertificateFlags};
|
||||
pub mod connection;
|
||||
pub mod error;
|
||||
|
||||
pub use connection::Connection;
|
||||
pub use error::Error;
|
||||
|
||||
pub const DEFAULT_PORT: u16 = 1965;
|
||||
|
||||
use gio::{
|
||||
prelude::SocketClientExt, Cancellable, SocketClient, SocketProtocol, TlsCertificateFlags,
|
||||
};
|
||||
use glib::Uri;
|
||||
|
||||
pub struct Socket {
|
||||
gobject: SocketClient,
|
||||
client: SocketClient,
|
||||
}
|
||||
|
||||
impl Socket {
|
||||
// Constructors
|
||||
|
||||
/// Create new `gio::SocketClient` preset for Gemini Protocol
|
||||
pub fn new() -> Self {
|
||||
let gobject = SocketClient::new();
|
||||
let client = SocketClient::new();
|
||||
|
||||
gobject.set_protocol(SocketProtocol::Tcp);
|
||||
gobject.set_tls_validation_flags(TlsCertificateFlags::INSECURE);
|
||||
gobject.set_tls(true);
|
||||
client.set_protocol(SocketProtocol::Tcp);
|
||||
client.set_tls_validation_flags(TlsCertificateFlags::INSECURE);
|
||||
client.set_tls(true);
|
||||
|
||||
Self { gobject }
|
||||
Self { client }
|
||||
}
|
||||
|
||||
// Actions
|
||||
pub fn connect_async(
|
||||
&self,
|
||||
uri: Uri,
|
||||
cancelable: Option<Cancellable>,
|
||||
callback: impl FnOnce(Result<Connection, Error>) + 'static,
|
||||
) {
|
||||
self.client.connect_to_uri_async(
|
||||
uri.to_str().as_str(),
|
||||
DEFAULT_PORT,
|
||||
match cancelable.clone() {
|
||||
Some(value) => Some(value),
|
||||
None => None::<Cancellable>,
|
||||
}
|
||||
.as_ref(),
|
||||
|result| {
|
||||
callback(match result {
|
||||
Ok(connection) => Ok(Connection::new_from(connection)),
|
||||
Err(_) => Err(Error::Connection),
|
||||
})
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
// Getters
|
||||
|
||||
/// Return ref to `gio::SocketClient` GObject
|
||||
pub fn gobject(&self) -> &SocketClient {
|
||||
self.gobject.as_ref()
|
||||
pub fn client(&self) -> &SocketClient {
|
||||
self.client.as_ref()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue