xidl-jsonrpc 0.28.0

A IDL codegen.
Documentation
use std::net::SocketAddr;

use super::{Listener, Stream};

pub struct TcpListener {
    inner: tokio::net::TcpListener,
}

impl TcpListener {
    pub async fn bind(addr: &str) -> std::io::Result<Self> {
        let inner = tokio::net::TcpListener::bind(addr).await?;
        Ok(Self { inner })
    }
}

#[async_trait::async_trait]
impl Listener for TcpListener {
    async fn accept(
        &self,
    ) -> std::io::Result<(Box<dyn Stream + Unpin + Send + 'static>, SocketAddr)> {
        let (stream, peer) = self.inner.accept().await?;
        Ok((Box::new(stream), peer))
    }

    fn endpoint(&self) -> Option<String> {
        self.inner
            .local_addr()
            .ok()
            .map(|addr| format!("tcp://{addr}"))
    }
}