use lockshed::SharedCounter;
tokio_socket::rpc::protocol! {
pub mod server_rpc {
#[derive(Debug)] server_action1 {
server_arg1: u32,
server_arg2: String,
} -> #[derive(Debug)] {
server_result1: u32,
server_result2: String,
};
#[derive(Debug)] server_action2 -> #[derive(Debug)] {
server_result1: u32,
server_result2: String,
};
#[derive(Debug)] server_action3 {
server_arg1: u32,
server_arg2: String,
};
}
}
tokio_socket::rpc::protocol! {
pub mod client_rpc {
#[derive(Debug)] client_action1 {
client_arg1: u32,
client_arg2: String,
} -> #[derive(Debug)] {
client_result1: u32,
client_result2: String,
};
#[derive(Debug)] client_action2 -> #[derive(Debug)] {
client_result1: u32,
client_result2: String,
};
#[derive(Debug)] client_action3 {
client_arg1: u32,
client_arg2: String,
};
}
}
#[derive(Clone)]
pub struct ServerHandler {
#[allow(unused)]
pub client: client_rpc::Sender,
}
impl server_rpc::Receive for ServerHandler {
async fn server_action1(
&self,
server_arg1: u32,
server_arg2: String,
) -> anyhow::Result<server_rpc::server_action1::Response> {
tracing::info!("server action 1");
Ok(server_rpc::server_action1::Response {
server_result1: server_arg1 + 1,
server_result2: format!("hi from server {server_arg2}"),
})
}
async fn server_action2(
&self,
) -> tokio_socket::rpc::anyhow::Result<server_rpc::server_action2::Response> {
tracing::info!("server action 2");
Ok(server_rpc::server_action2::Response {
server_result1: 42,
server_result2: "hi from server".to_string(),
})
}
async fn server_action3(
&self,
server_arg1: u32,
server_arg2: String,
) -> tokio_socket::rpc::anyhow::Result<()> {
tracing::info!("server action 3: {} {}", server_arg1, server_arg2);
Ok(())
}
}
#[derive(Clone)]
pub struct ClientHandler {
#[allow(unused)]
pub state: SharedCounter,
}
impl client_rpc::Receive for ClientHandler {
async fn client_action1(
&self,
client_arg1: u32,
client_arg2: String,
) -> tokio_socket::rpc::anyhow::Result<client_rpc::client_action1::Response> {
tracing::info!("client action 1");
Ok(client_rpc::client_action1::Response {
client_result1: client_arg1 + 1,
client_result2: format!("hi from client {client_arg2}"),
})
}
async fn client_action2(
&self,
) -> tokio_socket::rpc::anyhow::Result<client_rpc::client_action2::Response> {
tracing::info!("client action 2");
Ok(client_rpc::client_action2::Response {
client_result1: 42,
client_result2: "hi from client".to_string(),
})
}
async fn client_action3(
&self,
client_arg1: u32,
client_arg2: String,
) -> tokio_socket::rpc::anyhow::Result<()> {
tracing::info!("client action 3: {} {}", client_arg1, client_arg2);
Ok(())
}
}