1use opentelemetry::{KeyValue, Value};
16use tower::{Layer, Service};
17
18#[derive(Clone, Debug)]
20pub struct KV<V>(pub &'static str, pub V);
21
22impl<V> From<KV<V>> for KeyValue
23where
24 V: Into<Value>,
25{
26 fn from(value: KV<V>) -> Self {
27 Self::new(value.0, value.1.into())
28 }
29}
30
31#[derive(Clone, Debug)]
34pub struct FnWrapper<F>(pub F);
35
36#[derive(Clone, Copy, Debug)]
38pub struct IdentityLayer<R> {
39 _request: std::marker::PhantomData<R>,
40}
41
42impl<R> Default for IdentityLayer<R> {
43 fn default() -> Self {
44 Self {
45 _request: std::marker::PhantomData,
46 }
47 }
48}
49
50#[derive(Clone, Copy, Debug)]
52pub struct IdentityService<R, S> {
53 _request: std::marker::PhantomData<R>,
54 inner: S,
55}
56
57impl<R, S> Default for IdentityService<R, S>
58where
59 S: Default,
60{
61 fn default() -> Self {
62 Self {
63 _request: std::marker::PhantomData,
64 inner: S::default(),
65 }
66 }
67}
68
69impl<R, S> Layer<S> for IdentityLayer<R> {
70 type Service = IdentityService<R, S>;
71
72 fn layer(&self, inner: S) -> Self::Service {
73 IdentityService {
74 _request: std::marker::PhantomData,
75 inner,
76 }
77 }
78}
79
80impl<S, R> Service<R> for IdentityService<R, S>
81where
82 S: Service<R>,
83{
84 type Response = S::Response;
85 type Error = S::Error;
86 type Future = S::Future;
87
88 fn poll_ready(
89 &mut self,
90 cx: &mut std::task::Context<'_>,
91 ) -> std::task::Poll<Result<(), Self::Error>> {
92 self.inner.poll_ready(cx)
93 }
94
95 fn call(&mut self, req: R) -> Self::Future {
96 self.inner.call(req)
97 }
98}