pub mod memory;
use crate::types::{FluxTransference, TransportConfig};
pub type Result<T> = core::result::Result<T, TransportError>;
#[derive(Debug)]
pub enum TransportError {
ConnectionFailed(String),
SendFailed(String),
ReceiveFailed(String),
NotConnected,
InvalidConfig(String),
}
pub trait Transport {
fn connect(&mut self, config: &TransportConfig) -> Result<()>;
fn send_flux(&mut self, flux: &FluxTransference) -> Result<()>;
fn recv_flux(&mut self) -> Result<FluxTransference>;
fn disconnect(&mut self) -> Result<()>;
fn is_connected(&self) -> bool;
}
#[cfg(test)]
mod tests {
use super::*;
use crate::transport::memory::MemoryTransport;
#[test]
fn test_memory_transport_lifecycle() {
let config = TransportConfig {
transport_type: "memory".to_string(),
address: "local".to_string(),
port: 0,
options: Default::default(),
};
let mut transport = MemoryTransport::new();
assert!(!transport.is_connected());
transport.connect(&config).unwrap();
assert!(transport.is_connected());
transport.disconnect().unwrap();
assert!(!transport.is_connected());
}
}