kode-bridge 0.5.1

Modern HTTP Over IPC library for Rust with both client and server support (Unix sockets, Windows named pipes).
Documentation
#![cfg(feature = "server")]

use kode_bridge::{
    pool::{ConnectionPool, PoolConfig, PooledConnection},
    ClientInfo, Endpoint, IpcHttpServer, IpcStream, IpcStreamServer, ListenerOptions, PeerCredentials,
};
use tokio::io::{AsyncRead, AsyncWrite};

const fn assert_async_io<T: AsyncRead + AsyncWrite + Unpin + Send>() {}

fn pooled_stream_signatures(mut connection: PooledConnection) {
    let _borrowed: Option<&mut IpcStream> = connection.stream();
    let _owned: Option<IpcStream> = connection.into_stream();
}

#[test]
fn migration_api_contract_compiles() -> kode_bridge::Result<()> {
    #[cfg(unix)]
    let path = "/tmp/kode-bridge-public-api.sock";
    #[cfg(windows)]
    let path = r"\\.\pipe\kode-bridge-public-api";

    let endpoint = Endpoint::new(path)?;
    assert_eq!(endpoint.as_path(), std::path::Path::new(path));

    let listener_options = ListenerOptions::new()
        .reclaim_name(true)
        .try_overwrite(false)
        .max_spin_time(std::time::Duration::from_millis(100));
    let _server = IpcHttpServer::new(endpoint.as_path())?.with_listener_options(listener_options.clone());
    let _stream_server = IpcStreamServer::new(endpoint.as_path())?.with_listener_options(listener_options);

    let _pool = ConnectionPool::new(endpoint.clone(), PoolConfig::default());
    let _default_pool = ConnectionPool::with_default_config(endpoint);
    let _pooled_api: fn(PooledConnection) = pooled_stream_signatures;
    assert_async_io::<IpcStream>();

    let unavailable = PeerCredentials::default();
    assert_eq!(unavailable.uid, None);
    assert_eq!(unavailable.gid, None);
    let _client_info = ClientInfo {
        connection_id: 1,
        connected_at: std::time::Instant::now(),
        peer_credentials: unavailable,
    };
    #[cfg(feature = "client")]
    {
        let config = kode_bridge::ClientConfig::default();
        assert!(!config.require_windows_server_system);
        #[cfg(windows)]
        {
            let _verifier: Option<fn(u32) -> std::io::Result<()>> = config.windows_server_pid_verifier;
        }
    }
    Ok(())
}