pub mod stream;
use crate::connector::{
ButtplugConnectorError, ButtplugConnectorResultFuture, ButtplugSerializedMessage,
};
use displaydoc::Display;
use futures::future::BoxFuture;
use thiserror::Error;
use tokio::sync::mpsc::{Receiver, Sender};
#[derive(Clone, Debug, Display)]
pub enum ButtplugTransportIncomingMessage {
Connected,
Message(ButtplugSerializedMessage),
Error(String),
Close(String),
}
pub trait ButtplugConnectorTransport: Send + Sync {
fn connect(
&self,
outgoing_receiver: Receiver<ButtplugSerializedMessage>,
incoming_sender: Sender<ButtplugTransportIncomingMessage>,
) -> BoxFuture<'static, Result<(), ButtplugConnectorError>>;
fn disconnect(self) -> ButtplugConnectorResultFuture;
}
#[derive(Error, Debug)]
pub enum ButtplugConnectorTransportSpecificError {
#[error("Network error: {0}")]
GenericNetworkError(String),
#[error("Socket bind error on {address}:{port}: {kind:?}: {message}")]
SocketBindError {
address: String,
port: u16,
kind: std::io::ErrorKind,
message: String,
},
}