bitconch_jsonrpc_ws_server/
server_builder.rs1use std::net::SocketAddr;
2use std::sync::Arc;
3
4use core;
5use server_utils;
6use server_utils::cors::Origin;
7use server_utils::hosts::{Host, DomainsValidation};
8use server_utils::reactor::UninitializedExecutor;
9use server_utils::session::SessionStats;
10
11use error::Result;
12use metadata::{MetaExtractor, NoopExtractor};
13use server::Server;
14use session;
15
16pub struct ServerBuilder<M: core::Metadata, S: core::Middleware<M>> {
18 handler: Arc<core::MetaIoHandler<M, S>>,
19 meta_extractor: Arc<MetaExtractor<M>>,
20 allowed_origins: Option<Vec<Origin>>,
21 allowed_hosts: Option<Vec<Host>>,
22 request_middleware: Option<Arc<session::RequestMiddleware>>,
23 session_stats: Option<Arc<SessionStats>>,
24 executor: UninitializedExecutor,
25 max_connections: usize,
26}
27
28impl<M: core::Metadata + Default, S: core::Middleware<M>> ServerBuilder<M, S> {
29 pub fn new<T>(handler: T) -> Self where
31 T: Into<core::MetaIoHandler<M, S>>,
32 {
33 Self::with_meta_extractor(handler, NoopExtractor)
34 }
35}
36
37impl<M: core::Metadata, S: core::Middleware<M>> ServerBuilder<M, S> {
38 pub fn with_meta_extractor<T, E>(handler: T, extractor: E) -> Self where
40 T: Into<core::MetaIoHandler<M, S>>,
41 E: MetaExtractor<M>,
42 {
43 ServerBuilder {
44 handler: Arc::new(handler.into()),
45 meta_extractor: Arc::new(extractor),
46 allowed_origins: None,
47 allowed_hosts: None,
48 request_middleware: None,
49 session_stats: None,
50 executor: UninitializedExecutor::Unspawned,
51 max_connections: 100,
52 }
53 }
54
55 pub fn event_loop_executor(mut self, executor: server_utils::tokio::runtime::TaskExecutor) -> Self {
57 self.executor = UninitializedExecutor::Shared(executor);
58 self
59 }
60
61 pub fn session_meta_extractor<T: MetaExtractor<M>>(mut self, extractor: T) -> Self {
63 self.meta_extractor = Arc::new(extractor);
64 self
65 }
66
67 pub fn allowed_origins(mut self, allowed_origins: DomainsValidation<Origin>) -> Self {
69 self.allowed_origins = allowed_origins.into();
70 self
71 }
72
73 pub fn allowed_hosts(mut self, allowed_hosts: DomainsValidation<Host>) -> Self {
75 self.allowed_hosts = allowed_hosts.into();
76 self
77 }
78
79 pub fn session_stats<T: SessionStats>(mut self, stats: T) -> Self {
81 self.session_stats = Some(Arc::new(stats));
82 self
83 }
84
85 pub fn request_middleware<T: session::RequestMiddleware>(mut self, middleware: T) -> Self {
88 self.request_middleware = Some(Arc::new(middleware));
89 self
90 }
91
92 pub fn max_connections(mut self, max_connections: usize) -> Self {
95 self.max_connections = max_connections;
96 self
97 }
98
99 pub fn start(self, addr: &SocketAddr) -> Result<Server> {
102 Server::start(
103 addr,
104 self.handler,
105 self.meta_extractor,
106 self.allowed_origins,
107 self.allowed_hosts,
108 self.request_middleware,
109 self.session_stats,
110 self.executor,
111 self.max_connections,
112 )
113 }
114
115}