implement cancel action

This commit is contained in:
yggverse 2024-11-30 17:26:03 +02:00
parent 6ee60e9d9d
commit cdf35db0d6
2 changed files with 12 additions and 1 deletions

View file

@ -2,7 +2,7 @@ pub mod error;
pub use error::Error;
use gio::{
prelude::{IOStreamExt, TlsConnectionExt},
prelude::{CancellableExt, IOStreamExt, TlsConnectionExt},
Cancellable, IOStream, NetworkAddress, SocketConnection, TlsCertificate, TlsClientConnection,
};
use glib::object::{Cast, IsA};
@ -50,6 +50,15 @@ impl Connection {
// Actions
/// Apply `cancel` action to `Self` [Cancellable](https://docs.gtk.org/gio/method.Cancellable.cancel.html)
/// * return `Error` on `Cancellable` not found
pub fn cancel(&self) -> Result<(), Error> {
match self.cancellable {
Some(ref cancellable) => Ok(cancellable.cancel()),
None => Err(Error::Cancel),
}
}
/// Close owned [SocketConnection](https://docs.gtk.org/gio/class.SocketConnection.html)
pub fn close(&self) -> Result<(), Error> {
match self.socket_connection.close(self.cancellable.as_ref()) {

View file

@ -2,6 +2,7 @@ use std::fmt::{Display, Formatter, Result};
#[derive(Debug)]
pub enum Error {
Cancel,
Closed,
Rehandshake(glib::Error),
SocketConnection(glib::Error),
@ -11,6 +12,7 @@ pub enum Error {
impl Display for Error {
fn fmt(&self, f: &mut Formatter) -> Result {
match self {
Self::Cancel => write!(f, "Cancellable not found"),
Self::Closed => write!(f, "Connection closed"),
Self::Rehandshake(e) => {
write!(f, "Rehandshake error: {e}")