#[cfg(feature = "websockets")]
mod websocket;
use crate::connector::{
ButtplugConnectorError,
ButtplugConnectorResultFuture,
ButtplugSerializedMessage,
};
use futures::future::BoxFuture;
use tokio::sync::mpsc::{Receiver, Sender};
#[cfg(feature = "websockets")]
pub use websocket::{ButtplugWebsocketClientTransport, TungsteniteError};
#[cfg(all(feature = "websockets", feature = "async-std-runtime"))]
pub use websocket::{ButtplugWebsocketServerTransport, ButtplugWebsocketServerTransportOptions};
use thiserror::Error;
#[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 {
#[cfg(feature = "websockets")]
#[error("Tungstenite specific error: {0}")]
TungsteniteError(#[from] TungsteniteError),
#[error("Secure server error: %s")]
SecureServerError(String),
}