tsp_sdk 0.9.0-alpha2

Rust implementation of the Trust Spanning Protocol
Documentation
use crate::definitions::TSPStream;
use bytes::BytesMut;
use url::Url;

pub mod error;

mod http;
mod quic;
mod tcp;
mod tls;

pub use error::TransportError;

pub async fn send_message(transport: &Url, tsp_message: &[u8]) -> Result<(), TransportError> {
    if tracing::enabled!(tracing::Level::TRACE) {
        println!(
            "CESR-encoded message: {}",
            crate::cesr::color_format(tsp_message)
                .map_err(|_| TransportError::InvalidMessageReceived("DecodeError".to_string()))?
        );
    }

    match transport.scheme() {
        tcp::SCHEME => tcp::send_message(tsp_message, transport).await,
        tls::SCHEME => tls::send_message(tsp_message, transport).await,
        quic::SCHEME => quic::send_message(tsp_message, transport).await,
        http::SCHEME_HTTP => http::send_message(tsp_message, transport).await,
        http::SCHEME_HTTPS => http::send_message(tsp_message, transport).await,
        _ => Err(TransportError::InvalidTransportScheme(
            transport.scheme().to_string(),
        )),
    }
}

pub async fn receive_messages(
    transport: &Url,
) -> Result<TSPStream<BytesMut, TransportError>, TransportError> {
    match transport.scheme() {
        tcp::SCHEME => tcp::receive_messages(transport).await,
        tls::SCHEME => tls::receive_messages(transport).await,
        quic::SCHEME => quic::receive_messages(transport).await,
        http::SCHEME_HTTP => http::receive_messages(transport).await,
        http::SCHEME_HTTPS => http::receive_messages(transport).await,
        _ => Err(TransportError::InvalidTransportScheme(
            transport.scheme().to_string(),
        )),
    }
}