use crate::service::{Layer, Service};
use conjure_error::Error;
use http::Request;
use std::marker::PhantomData;
use std::sync::Arc;
pub struct EmptyNodeSelectorLayer {
service: Arc<str>,
}
impl EmptyNodeSelectorLayer {
pub fn new(service: &str) -> EmptyNodeSelectorLayer {
EmptyNodeSelectorLayer {
service: service.into(),
}
}
}
impl<S> Layer<S> for EmptyNodeSelectorLayer {
type Service = EmptyNodeSelectorService<S>;
fn layer(self, _: S) -> Self::Service {
EmptyNodeSelectorService {
service: self.service,
_p: PhantomData,
}
}
}
pub struct EmptyNodeSelectorService<S> {
service: Arc<str>,
_p: PhantomData<S>,
}
impl<S, B> Service<Request<B>> for EmptyNodeSelectorService<S>
where
S: Service<Request<B>, Error = Error>,
{
type Response = S::Response;
type Error = Error;
async fn call(&self, _: Request<B>) -> Result<Self::Response, Self::Error> {
Err(Error::internal_safe("service configured with no URIs")
.with_safe_param("service", &*self.service))
}
}