Skip to content

Commit

Permalink
refactor(server): make Server::start infallible and add `fn builder…
Browse files Browse the repository at this point in the history
…()` (#1137)

* refactor(server): make `Server::start` infallible

* fix tests

* add: builder fn's

* update examples
  • Loading branch information
niklasad1 committed May 28, 2023
1 parent ab097c8 commit e81bdae
Show file tree
Hide file tree
Showing 34 changed files with 128 additions and 90 deletions.
4 changes: 2 additions & 2 deletions benches/helpers.rs
Expand Up @@ -125,7 +125,7 @@ pub async fn http_server(handle: tokio::runtime::Handle) -> (String, jsonrpsee::
let module = gen_rpc_module();

let addr = server.local_addr().unwrap();
let handle = server.start(module).unwrap();
let handle = server.start(module);
(format!("http://{}", addr), handle)
}

Expand Down Expand Up @@ -161,7 +161,7 @@ pub async fn ws_server(handle: tokio::runtime::Handle) -> (String, jsonrpsee::se
.unwrap();

let addr = format!("ws://{}", server.local_addr().unwrap());
let handle = server.start(module).unwrap();
let handle = server.start(module);
(addr, handle)
}

Expand Down
14 changes: 14 additions & 0 deletions client/http-client/src/client.rs
Expand Up @@ -233,6 +233,13 @@ impl Default for HttpClientBuilder<Identity> {
}
}

impl HttpClientBuilder<Identity> {
/// Create a new builder.
pub fn new() -> HttpClientBuilder<Identity> {
HttpClientBuilder::default()
}
}

/// JSON-RPC HTTP Client that provides functionality to perform method calls and notifications.
#[derive(Debug, Clone)]
pub struct HttpClient<S = HttpBackend> {
Expand All @@ -244,6 +251,13 @@ pub struct HttpClient<S = HttpBackend> {
id_manager: Arc<RequestIdManager>,
}

impl<S> HttpClient<S> {
/// Create a builder for the HttpClient.
pub fn builder() -> HttpClientBuilder {
HttpClientBuilder::new()
}
}

#[async_trait]
impl<B, S> ClientT for HttpClient<S>
where
Expand Down
5 changes: 5 additions & 0 deletions client/wasm-client/src/lib.rs
Expand Up @@ -81,6 +81,11 @@ impl Default for WasmClientBuilder {
}

impl WasmClientBuilder {
/// Create a new WASM client builder.
pub fn new() -> WasmClientBuilder {
WasmClientBuilder::default()
}

/// See documentation [`ClientBuilder::request_timeout`] (default is 60 seconds).
pub fn request_timeout(mut self, timeout: Duration) -> Self {
self.request_timeout = timeout;
Expand Down
5 changes: 5 additions & 0 deletions client/ws-client/src/lib.rs
Expand Up @@ -109,6 +109,11 @@ impl Default for WsClientBuilder {
}

impl WsClientBuilder {
/// Create a new WebSocket client builder.
pub fn new() -> WsClientBuilder {
WsClientBuilder::default()
}

/// Force to use the rustls native certificate store.
///
/// Since multiple certificate stores can be optionally enabled, this option will
Expand Down
10 changes: 10 additions & 0 deletions core/src/client/async_client/mod.rs
Expand Up @@ -92,6 +92,11 @@ impl Default for ClientBuilder {
}

impl ClientBuilder {
/// Create a builder for the client.
pub fn new() -> ClientBuilder {
ClientBuilder::default()
}

/// Set request timeout (default is 60 seconds).
pub fn request_timeout(mut self, timeout: Duration) -> Self {
self.request_timeout = timeout;
Expand Down Expand Up @@ -248,6 +253,11 @@ pub struct Client {
}

impl Client {
/// Create a builder for the server.
pub fn builder() -> ClientBuilder {
ClientBuilder::new()
}

/// Checks if the client is connected to the target.
pub fn is_connected(&self) -> bool {
!self.to_back.is_closed()
Expand Down
6 changes: 3 additions & 3 deletions examples/examples/core_client.rs
Expand Up @@ -29,7 +29,7 @@ use std::net::SocketAddr;
use jsonrpsee::client_transport::ws::{Uri, WsTransportClientBuilder};
use jsonrpsee::core::client::{Client, ClientBuilder, ClientT};
use jsonrpsee::rpc_params;
use jsonrpsee::server::{RpcModule, ServerBuilder};
use jsonrpsee::server::{RpcModule, Server};

#[tokio::main]
async fn main() -> anyhow::Result<()> {
Expand All @@ -50,12 +50,12 @@ async fn main() -> anyhow::Result<()> {
}

async fn run_server() -> anyhow::Result<SocketAddr> {
let server = ServerBuilder::default().build("127.0.0.1:0").await?;
let server = Server::builder().build("127.0.0.1:0").await?;
let mut module = RpcModule::new(());
module.register_method("say_hello", |_, _| "lo")?;
let addr = server.local_addr()?;

let handle = server.start(module)?;
let handle = server.start(module);

// In this example we don't care about doing shutdown so let's it run forever.
// You may use the `ServerHandle` to shut it down or manage it yourself.
Expand Down
7 changes: 3 additions & 4 deletions examples/examples/cors_server.rs
Expand Up @@ -28,11 +28,10 @@
//! with access control allowing requests from all hosts.

use hyper::Method;
use jsonrpsee::server::{AllowHosts, RpcModule, Server};
use std::net::SocketAddr;
use tower_http::cors::{Any, CorsLayer};

use jsonrpsee::server::{AllowHosts, RpcModule, ServerBuilder};

#[tokio::main]
async fn main() -> anyhow::Result<()> {
tracing_subscriber::FmtSubscriber::builder()
Expand Down Expand Up @@ -86,7 +85,7 @@ async fn run_server() -> anyhow::Result<SocketAddr> {
// modifying requests / responses. These features are independent of one another
// and can also be used separately.
// In this example, we use both features.
let server = ServerBuilder::default()
let server = Server::builder()
.set_host_filtering(AllowHosts::Any)
.set_middleware(middleware)
.build("127.0.0.1:0".parse::<SocketAddr>()?)
Expand All @@ -99,7 +98,7 @@ async fn run_server() -> anyhow::Result<SocketAddr> {
})?;

let addr = server.local_addr()?;
let handle = server.start(module)?;
let handle = server.start(module);

// In this example we don't care about doing shutdown so let's it run forever.
// You may use the `ServerHandle` to shut it down or manage it yourself.
Expand Down
6 changes: 3 additions & 3 deletions examples/examples/http.rs
Expand Up @@ -31,7 +31,7 @@ use hyper::body::Bytes;
use jsonrpsee::core::client::ClientT;
use jsonrpsee::http_client::HttpClientBuilder;
use jsonrpsee::rpc_params;
use jsonrpsee::server::{RpcModule, ServerBuilder};
use jsonrpsee::server::{RpcModule, Server};
use tower_http::trace::{DefaultMakeSpan, DefaultOnResponse, TraceLayer};
use tower_http::LatencyUnit;
use tracing_subscriber::util::SubscriberInitExt;
Expand Down Expand Up @@ -67,12 +67,12 @@ async fn main() -> anyhow::Result<()> {
}

async fn run_server() -> anyhow::Result<SocketAddr> {
let server = ServerBuilder::default().build("127.0.0.1:0".parse::<SocketAddr>()?).await?;
let server = Server::builder().build("127.0.0.1:0".parse::<SocketAddr>()?).await?;
let mut module = RpcModule::new(());
module.register_method("say_hello", |_, _| "lo")?;

let addr = server.local_addr()?;
let handle = server.start(module)?;
let handle = server.start(module);

// In this example we don't care about doing shutdown so let's it run forever.
// You may use the `ServerHandle` to shut it down or manage it yourself.
Expand Down
7 changes: 3 additions & 4 deletions examples/examples/http_proxy_middleware.rs
Expand Up @@ -45,7 +45,7 @@ use jsonrpsee::core::client::ClientT;
use jsonrpsee::http_client::HttpClientBuilder;
use jsonrpsee::rpc_params;
use jsonrpsee::server::middleware::proxy_get_request::ProxyGetRequestLayer;
use jsonrpsee::server::{RpcModule, ServerBuilder};
use jsonrpsee::server::{RpcModule, Server};

#[tokio::main]
async fn main() -> anyhow::Result<()> {
Expand Down Expand Up @@ -87,16 +87,15 @@ async fn run_server() -> anyhow::Result<SocketAddr> {
.layer(ProxyGetRequestLayer::new("/health", "system_health")?)
.timeout(Duration::from_secs(2));

let server =
ServerBuilder::new().set_middleware(service_builder).build("127.0.0.1:0".parse::<SocketAddr>()?).await?;
let server = Server::builder().set_middleware(service_builder).build("127.0.0.1:0".parse::<SocketAddr>()?).await?;

let addr = server.local_addr()?;

let mut module = RpcModule::new(());
module.register_method("say_hello", |_, _| "lo").unwrap();
module.register_method("system_health", |_, _| serde_json::json!({ "health": true })).unwrap();

let handle = server.start(module)?;
let handle = server.start(module);

// In this example we don't care about doing shutdown so let's it run forever.
// You may use the `ServerHandle` to shut it down or manage it yourself.
Expand Down
6 changes: 3 additions & 3 deletions examples/examples/logger.rs
Expand Up @@ -29,7 +29,7 @@ use std::time::Instant;

use jsonrpsee::core::client::ClientT;
use jsonrpsee::server::logger::{self, HttpRequest, MethodKind, Params, TransportProtocol};
use jsonrpsee::server::ServerBuilder;
use jsonrpsee::server::Server;
use jsonrpsee::ws_client::WsClientBuilder;
use jsonrpsee::{rpc_params, RpcModule};

Expand Down Expand Up @@ -85,12 +85,12 @@ async fn main() -> anyhow::Result<()> {
}

async fn run_server() -> anyhow::Result<SocketAddr> {
let server = ServerBuilder::new().set_logger(Timings).build("127.0.0.1:0").await?;
let server = Server::builder().set_logger(Timings).build("127.0.0.1:0").await?;
let mut module = RpcModule::new(());
module.register_method("say_hello", |_, _| "lo")?;
let addr = server.local_addr()?;

let handle = server.start(module)?;
let handle = server.start(module);

// In this example we don't care about doing shutdown so let's it run forever.
// You may use the `ServerHandle` to shut it down or manage it yourself.
Expand Down
7 changes: 3 additions & 4 deletions examples/examples/middleware.rs
Expand Up @@ -42,7 +42,7 @@ use tower_http::LatencyUnit;

use jsonrpsee::core::client::ClientT;
use jsonrpsee::http_client::HttpClientBuilder;
use jsonrpsee::server::{RpcModule, ServerBuilder};
use jsonrpsee::server::{RpcModule, Server};
use jsonrpsee::ws_client::WsClientBuilder;

#[tokio::main]
Expand Down Expand Up @@ -104,15 +104,14 @@ async fn run_server() -> anyhow::Result<SocketAddr> {
.layer(cors)
.timeout(Duration::from_secs(2));

let server =
ServerBuilder::new().set_middleware(service_builder).build("127.0.0.1:0".parse::<SocketAddr>()?).await?;
let server = Server::builder().set_middleware(service_builder).build("127.0.0.1:0".parse::<SocketAddr>()?).await?;

let addr = server.local_addr()?;

let mut module = RpcModule::new(());
module.register_method("say_hello", |_, _| "lo").unwrap();

let handle = server.start(module)?;
let handle = server.start(module);

// In this example we don't care about doing shutdown so let's it run forever.
// You may use the `ServerHandle` to shut it down or manage it yourself.
Expand Down
6 changes: 3 additions & 3 deletions examples/examples/multi_logger.rs
Expand Up @@ -33,7 +33,7 @@ use std::time::Instant;
use jsonrpsee::core::client::ClientT;
use jsonrpsee::rpc_params;
use jsonrpsee::server::logger::{HttpRequest, MethodKind, TransportProtocol};
use jsonrpsee::server::{logger, RpcModule, ServerBuilder};
use jsonrpsee::server::{logger, RpcModule, Server};
use jsonrpsee::types::Params;
use jsonrpsee::ws_client::WsClientBuilder;

Expand Down Expand Up @@ -142,7 +142,7 @@ async fn main() -> anyhow::Result<()> {
}

async fn run_server() -> anyhow::Result<SocketAddr> {
let server = ServerBuilder::new().set_logger((Timings, ThreadWatcher)).build("127.0.0.1:0").await?;
let server = Server::builder().set_logger((Timings, ThreadWatcher)).build("127.0.0.1:0").await?;
let mut module = RpcModule::new(());
module.register_method("say_hello", |_, _| "lo")?;
module.register_method("thready", |params, _| {
Expand All @@ -153,7 +153,7 @@ async fn run_server() -> anyhow::Result<SocketAddr> {
""
})?;
let addr = server.local_addr()?;
let handle = server.start(module)?;
let handle = server.start(module);

// In this example we don't care about doing shutdown so let's it run forever.
// You may use the `ServerHandle` to shut it down or manage it yourself.
Expand Down
6 changes: 3 additions & 3 deletions examples/examples/proc_macro.rs
Expand Up @@ -28,7 +28,7 @@ use std::net::SocketAddr;

use jsonrpsee::core::{async_trait, client::Subscription, SubscriptionResult};
use jsonrpsee::proc_macros::rpc;
use jsonrpsee::server::{PendingSubscriptionSink, ServerBuilder, SubscriptionMessage};
use jsonrpsee::server::{PendingSubscriptionSink, Server, SubscriptionMessage};
use jsonrpsee::types::ErrorObjectOwned;
use jsonrpsee::ws_client::WsClientBuilder;

Expand Down Expand Up @@ -99,10 +99,10 @@ async fn main() -> anyhow::Result<()> {
}

async fn run_server() -> anyhow::Result<SocketAddr> {
let server = ServerBuilder::default().build("127.0.0.1:0").await?;
let server = Server::builder().build("127.0.0.1:0").await?;

let addr = server.local_addr()?;
let handle = server.start(RpcServerImpl.into_rpc())?;
let handle = server.start(RpcServerImpl.into_rpc());

// In this example we don't care about doing shutdown so let's it run forever.
// You may use the `ServerHandle` to shut it down or manage it yourself.
Expand Down
6 changes: 3 additions & 3 deletions examples/examples/proc_macro_bounds.rs
Expand Up @@ -28,7 +28,7 @@ use std::net::SocketAddr;

use jsonrpsee::core::async_trait;
use jsonrpsee::proc_macros::rpc;
use jsonrpsee::server::ServerBuilder;
use jsonrpsee::server::Server;
use jsonrpsee::types::ErrorObjectOwned;
use jsonrpsee::ws_client::WsClientBuilder;

Expand Down Expand Up @@ -83,10 +83,10 @@ async fn main() -> anyhow::Result<()> {
}

async fn run_server() -> anyhow::Result<SocketAddr> {
let server = ServerBuilder::default().build("127.0.0.1:0").await?;
let server = Server::builder().build("127.0.0.1:0").await?;

let addr = server.local_addr()?;
let handle = server.start(RpcServerImpl.into_rpc())?;
let handle = server.start(RpcServerImpl.into_rpc());

// In this example we don't care about doing shutdown so let's it run forever.
// You may use the `ServerHandle` to shut it down or manage it yourself.
Expand Down
6 changes: 3 additions & 3 deletions examples/examples/tokio_console.rs
Expand Up @@ -36,7 +36,7 @@

use std::net::SocketAddr;

use jsonrpsee::server::ServerBuilder;
use jsonrpsee::server::Server;
use jsonrpsee::RpcModule;

#[tokio::main]
Expand All @@ -49,7 +49,7 @@ async fn main() -> anyhow::Result<()> {
}

async fn run_server() -> anyhow::Result<SocketAddr> {
let server = ServerBuilder::default().build("127.0.0.1:9944").await?;
let server = Server::builder().build("127.0.0.1:9944").await?;
let mut module = RpcModule::new(());
module.register_method("say_hello", |_, _| "lo")?;
module.register_method("memory_call", |_, _| "A".repeat(1024 * 1024))?;
Expand All @@ -59,7 +59,7 @@ async fn run_server() -> anyhow::Result<SocketAddr> {
})?;

let addr = server.local_addr()?;
let handle = server.start(module)?;
let handle = server.start(module);

// In this example we don't care about doing a stopping the server so let it run forever.
// You may use the `ServerHandle` to shut it down or manage it yourself.
Expand Down
6 changes: 3 additions & 3 deletions examples/examples/ws.rs
Expand Up @@ -27,7 +27,7 @@
use std::net::SocketAddr;

use jsonrpsee::core::client::ClientT;
use jsonrpsee::server::ServerBuilder;
use jsonrpsee::server::Server;
use jsonrpsee::ws_client::WsClientBuilder;
use jsonrpsee::{rpc_params, RpcModule};
use tracing_subscriber::util::SubscriberInitExt;
Expand All @@ -50,11 +50,11 @@ async fn main() -> anyhow::Result<()> {
}

async fn run_server() -> anyhow::Result<SocketAddr> {
let server = ServerBuilder::default().build("127.0.0.1:0").await?;
let server = Server::builder().build("127.0.0.1:0").await?;
let mut module = RpcModule::new(());
module.register_method("say_hello", |_, _| "lo")?;
let addr = server.local_addr()?;
let handle = server.start(module)?;
let handle = server.start(module);

// In this example we don't care about doing shutdown so let's it run forever.
// You may use the `ServerHandle` to shut it down or manage it yourself.
Expand Down
6 changes: 3 additions & 3 deletions examples/examples/ws_pubsub_broadcast.rs
Expand Up @@ -33,7 +33,7 @@ use futures::StreamExt;
use jsonrpsee::core::client::{Subscription, SubscriptionClientT};
use jsonrpsee::core::server::SubscriptionMessage;
use jsonrpsee::rpc_params;
use jsonrpsee::server::{RpcModule, ServerBuilder};
use jsonrpsee::server::{RpcModule, Server};
use jsonrpsee::ws_client::WsClientBuilder;
use jsonrpsee::PendingSubscriptionSink;
use tokio::sync::broadcast;
Expand Down Expand Up @@ -66,7 +66,7 @@ async fn main() -> anyhow::Result<()> {

async fn run_server() -> anyhow::Result<SocketAddr> {
// let's configure the server only hold 5 messages in memory.
let server = ServerBuilder::default().set_message_buffer_capacity(5).build("127.0.0.1:0").await?;
let server = Server::builder().set_message_buffer_capacity(5).build("127.0.0.1:0").await?;
let (tx, _rx) = broadcast::channel::<usize>(16);

let mut module = RpcModule::new(tx.clone());
Expand All @@ -82,7 +82,7 @@ async fn run_server() -> anyhow::Result<SocketAddr> {
})
.unwrap();
let addr = server.local_addr()?;
let handle = server.start(module)?;
let handle = server.start(module);

// In this example we don't care about doing shutdown so let's it run forever.
// You may use the `ServerHandle` to shut it down or manage it yourself.
Expand Down

0 comments on commit e81bdae

Please sign in to comment.