use rpcnet::{RpcConfig, RpcError, RpcServer};
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug)]
struct GreetRequest {
name: String,
}
#[derive(Serialize, Deserialize, Debug)]
struct GreetResponse {
message: String,
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("=== Basic RPC Server ===");
let config = RpcConfig::new("certs/test_cert.pem", "127.0.0.1:8080")
.with_key_path("certs/test_key.pem")
.with_server_name("localhost");
let mut server = RpcServer::new(config);
server
.register("greet", |params| async move {
let request: GreetRequest =
bincode::deserialize(¶ms).map_err(RpcError::SerializationError)?;
let response = if request.name.trim().is_empty() {
GreetResponse {
message: "Hello, anonymous!".to_string(),
}
} else {
GreetResponse {
message: format!("Hello, {}!", request.name),
}
};
bincode::serialize(&response).map_err(RpcError::SerializationError)
})
.await;
server
.register("echo", |params| async move {
Ok(params)
})
.await;
println!("Starting server on 127.0.0.1:8080...");
println!("Methods available: greet, echo");
println!("Use Ctrl+C to stop");
let quic_server = server.bind()?;
server.start(quic_server).await?;
Ok(())
}