labrpc 0.2.3

A RPC framework for testing
Documentation
use futures::channel::oneshot::Receiver;

use crate::{ReplyMessage, RequestMessage, Result, RpcOnWire};

pub(crate) mod junk_server;

pub(crate) fn make_aborting_rpc<C: Into<String>, S: Into<String>>(
    client: C,
    server: S,
) -> (RpcOnWire, Receiver<Result<ReplyMessage>>) {
    make_rpc(client, server, junk_server::JunkRpcs::Aborting, &[])
}

pub(crate) fn make_echo_rpc<C: Into<String>, S: Into<String>>(
    client: C,
    server: S,
    data: &[u8],
) -> (RpcOnWire, Receiver<Result<ReplyMessage>>) {
    make_rpc(client, server, junk_server::JunkRpcs::Echo, data)
}

pub(crate) fn make_rpc<C: Into<String>, S: Into<String>>(
    client: C,
    server: S,
    service_method: junk_server::JunkRpcs,
    data: &[u8],
) -> (RpcOnWire, Receiver<Result<ReplyMessage>>) {
    let (tx, rx) = futures::channel::oneshot::channel();
    (
        RpcOnWire {
            client: client.into(),
            server: server.into(),
            service_method: service_method.name(),
            request: RequestMessage::copy_from_slice(data),
            reply_channel: tx,
            #[cfg(feature = "tracing")]
            trace: crate::tracing::TraceHolder::make(),
        },
        rx,
    )
}