conjure_runtime/service/node/selector/
empty.rs1use crate::service::{Layer, Service};
15use conjure_error::Error;
16use http::Request;
17use std::marker::PhantomData;
18use std::sync::Arc;
19
20pub struct EmptyNodeSelectorLayer {
22 service: Arc<str>,
23}
24
25impl EmptyNodeSelectorLayer {
26 pub fn new(service: &str) -> EmptyNodeSelectorLayer {
27 EmptyNodeSelectorLayer {
28 service: service.into(),
29 }
30 }
31}
32
33impl<S> Layer<S> for EmptyNodeSelectorLayer {
34 type Service = EmptyNodeSelectorService<S>;
35
36 fn layer(self, _: S) -> Self::Service {
37 EmptyNodeSelectorService {
38 service: self.service,
39 _p: PhantomData,
40 }
41 }
42}
43
44pub struct EmptyNodeSelectorService<S> {
45 service: Arc<str>,
46 _p: PhantomData<S>,
47}
48
49impl<S, B> Service<Request<B>> for EmptyNodeSelectorService<S>
50where
51 S: Service<Request<B>, Error = Error>,
52{
53 type Response = S::Response;
54 type Error = Error;
55
56 async fn call(&self, _: Request<B>) -> Result<Self::Response, Self::Error> {
57 Err(Error::internal_safe("service configured with no URIs")
58 .with_safe_param("service", &*self.service))
59 }
60}