jsonrpc_ipc_server/
meta.rs

1use std::path::Path;
2
3use crate::jsonrpc::futures::channel::mpsc;
4use crate::jsonrpc::Metadata;
5use crate::server_utils::session;
6
7/// Request context
8pub struct RequestContext<'a> {
9	/// Session ID
10	pub session_id: session::SessionId,
11	/// Remote UDS endpoint
12	pub endpoint_addr: &'a Path,
13	/// Direct pipe sender
14	pub sender: mpsc::UnboundedSender<String>,
15}
16
17/// Metadata extractor (per session)
18pub trait MetaExtractor<M: Metadata>: Send + Sync + 'static {
19	/// Extracts metadata from request context
20	fn extract(&self, context: &RequestContext) -> M;
21}
22
23impl<M, F> MetaExtractor<M> for F
24where
25	M: Metadata,
26	F: Fn(&RequestContext) -> M + Send + Sync + 'static,
27{
28	fn extract(&self, context: &RequestContext) -> M {
29		(*self)(context)
30	}
31}
32
33/// Noop-extractor
34pub struct NoopExtractor;
35impl<M: Metadata + Default> MetaExtractor<M> for NoopExtractor {
36	fn extract(&self, _context: &RequestContext) -> M {
37		M::default()
38	}
39}