#async #framework

actori-codec

Utilities for encoding and decoding frames

1 unstable release

0.2.0 Jan 19, 2020

#1379 in #framework

Download history 60/week @ 2025-09-11 51/week @ 2025-09-18 62/week @ 2025-09-25 41/week @ 2025-10-02 34/week @ 2025-10-09 81/week @ 2025-10-16 67/week @ 2025-10-23 43/week @ 2025-10-30 42/week @ 2025-11-06 45/week @ 2025-11-13 38/week @ 2025-11-20 60/week @ 2025-11-27 48/week @ 2025-12-04 21/week @ 2025-12-11

82 downloads per month
Used in 21 crates (11 directly)

MIT/Apache

17KB
320 lines

Utilities for encoding and decoding frames.

Contains adapters to go from streams of bytes, AsyncRead and AsyncWrite, to framed streams implementing Sink and Stream. Framed streams are also known as [transports].


Actori net Build Status codecov Join the chat at https://gitter.im/actori/actori

Actori net - framework for composable network services

Documentation & community resources

Example

fn main() -> io::Result<()> {
    // load ssl keys
    let mut builder = SslAcceptor::mozilla_intermediate(SslMethod::tls()).unwrap();
    builder.set_private_key_file("./examples/key.pem", SslFiletype::PEM).unwrap();
    builder.set_certificate_chain_file("./examples/cert.pem").unwrap();
    let acceptor = builder.build();

    let num = Arc::new(AtomicUsize::new(0));

    // bind socket address and start workers. By default server uses number of
    // available logical cpu as threads count. actori net start separate
    // instances of service pipeline in each worker.
    Server::build()
        .bind(
            // configure service pipeline
            "basic", "0.0.0.0:8443",
            move || {
                let num = num.clone();
                let acceptor = acceptor.clone();

                // construct transformation pipeline
                pipeline(
                    // service for converting incoming TcpStream to a SslStream<TcpStream>
                    fn_service(move |stream: actori_rt::net::TcpStream| async move {
                        SslAcceptorExt::accept_async(&acceptor, stream.into_parts().0).await
                            .map_err(|e| println!("Openssl error: {}", e))
                    }))
                // .and_then() combinator chains result of previos service call to argument
                /// for next service calll. in this case, on success we chain
                /// ssl stream to the `logger` service.
                .and_then(fn_service(logger))
                // Next service counts number of connections
                .and_then(move |_| {
                    let num = num.fetch_add(1, Ordering::Relaxed);
                    println!("got ssl connection {:?}", num);
                    future::ok(())
                })
            },
        )?
        .run()
}

License

This project is licensed under either of

at your option.

Code of Conduct

Contribution to the actori-net crate is organized under the terms of the Contributor Covenant, the maintainer of actori-net, @fafhrd91, promises to intervene to uphold that code of conduct.

Dependencies

~4.5MB
~61K SLoC