@@ -6,23 +6,25 @@ use http::Request;
66use http:: Response ;
77use metrique:: AppendAndCloseOnDrop ;
88use metrique:: DefaultSink ;
9- use metrique:: RootEntry ;
10- use metrique_core:: CloseEntry ;
11- use metrique_writer:: EntrySink ;
129use thiserror:: Error ;
1310use tower:: Layer ;
1411
15- use crate :: DefaultInit ;
16- use crate :: DefaultRq ;
17- use crate :: DefaultRs ;
18- use crate :: ReqBody ;
19- use crate :: ResBody ;
2012use crate :: default:: DefaultMetrics ;
2113use crate :: default:: DefaultRequestMetricsConfig ;
2214use crate :: default:: DefaultResponseMetricsConfig ;
2315use crate :: layer:: builder:: MetricsLayerBuilder ;
2416use crate :: layer:: builder:: NeedsInitialization ;
2517use crate :: service:: MetricsLayerService ;
18+ use crate :: traits:: InitMetrics ;
19+ use crate :: traits:: MetriqueCloseEntry ;
20+ use crate :: traits:: MetriqueEntrySink ;
21+ use crate :: traits:: SetRequestMetrics ;
22+ use crate :: traits:: SetResponseMetrics ;
23+ use crate :: types:: DefaultInit ;
24+ use crate :: types:: DefaultRq ;
25+ use crate :: types:: DefaultRs ;
26+ use crate :: types:: ReqBody ;
27+ use crate :: types:: ResBody ;
2628
2729pub mod builder;
2830
@@ -40,11 +42,11 @@ pub struct MetricsLayer<
4042 Rq = DefaultRq < E , S > ,
4143 Rs = DefaultRs < E , S > ,
4244> where
43- E : CloseEntry + Send + Sync + ' static ,
44- S : EntrySink < RootEntry < E :: Closed > > + Send + Sync + ' static ,
45- I : Fn ( ) -> AppendAndCloseOnDrop < E , S > + Clone + Send + Sync + ' static ,
46- Rq : Fn ( & mut Request < ReqBody > , & mut AppendAndCloseOnDrop < E , S > ) + Clone + Send + Sync + ' static ,
47- Rs : Fn ( & mut Response < ResBody > , & mut AppendAndCloseOnDrop < E , S > ) + Clone + Send + Sync + ' static ,
45+ E : MetriqueCloseEntry ,
46+ S : MetriqueEntrySink < E > ,
47+ I : InitMetrics < E , S > ,
48+ Rq : SetRequestMetrics < E , S > ,
49+ Rs : SetResponseMetrics < E , S > ,
4850{
4951 pub ( crate ) init_metrics : I ,
5052 pub ( crate ) set_request_metrics : Option < Rq > ,
@@ -57,10 +59,23 @@ pub struct MetricsLayer<
5759 pub ( crate ) default_res_metrics_config : DefaultResponseMetricsConfig ,
5860}
5961
62+ impl < S > MetricsLayer < DefaultMetrics , S >
63+ where
64+ S : MetriqueEntrySink < DefaultMetrics > + Clone ,
65+ {
66+ pub fn new_with_sink (
67+ sink : S ,
68+ ) -> MetricsLayer < DefaultMetrics , S , impl InitMetrics < DefaultMetrics , S > > {
69+ Self :: builder ( )
70+ . init_metrics ( move || DefaultMetrics :: default ( ) . append_on_drop ( sink. clone ( ) ) )
71+ . build ( )
72+ }
73+ }
74+
6075impl < E , S > MetricsLayer < E , S >
6176where
62- E : CloseEntry + Send + Sync + ' static ,
63- S : EntrySink < RootEntry < E :: Closed > > + Send + Sync + ' static ,
77+ E : MetriqueCloseEntry ,
78+ S : MetriqueEntrySink < E > ,
6479{
6580 pub fn builder ( ) -> MetricsLayerBuilder < NeedsInitialization , E , S > {
6681 MetricsLayerBuilder {
@@ -70,18 +85,20 @@ where
7085 default_req_metrics_config : DefaultRequestMetricsConfig :: default ( ) ,
7186 default_res_metrics_config : DefaultResponseMetricsConfig :: default ( ) ,
7287 _state : PhantomData ,
88+ _close_entry : PhantomData ,
89+ _entry_sink : PhantomData ,
7390 }
7491 }
7592}
7693
7794impl < Ser , E , S , I , Rq , Rs > Layer < Ser > for MetricsLayer < E , S , I , Rq , Rs >
7895where
7996 Ser : Clone ,
80- E : CloseEntry + Send + Sync + ' static ,
81- S : EntrySink < RootEntry < E :: Closed > > + Send + Sync + ' static ,
82- I : Fn ( ) -> AppendAndCloseOnDrop < E , S > + Clone + Send + Sync + ' static ,
83- Rq : Fn ( & mut Request < ReqBody > , & mut AppendAndCloseOnDrop < E , S > ) + Clone + Send + Sync + ' static ,
84- Rs : Fn ( & mut Response < ResBody > , & mut AppendAndCloseOnDrop < E , S > ) + Clone + Send + Sync + ' static ,
97+ E : MetriqueCloseEntry ,
98+ S : MetriqueEntrySink < E > ,
99+ I : InitMetrics < E , S > ,
100+ Rq : SetRequestMetrics < E , S > ,
101+ Rs : SetResponseMetrics < E , S > ,
85102{
86103 type Service = MetricsLayerService < Ser , E , S , I , Rq , Rs > ;
87104
91108 init_metrics : self . init_metrics . clone ( ) ,
92109 set_request_metrics : self . set_request_metrics . clone ( ) ,
93110 set_response_metrics : self . set_response_metrics . clone ( ) ,
94- default_req_metrics_extension_fn : self . default_req_metrics_extension_fn . clone ( ) ,
95- default_res_metrics_extension_fn : self . default_res_metrics_extension_fn . clone ( ) ,
111+ default_req_metrics_extension_fn : self . default_req_metrics_extension_fn ,
112+ default_res_metrics_extension_fn : self . default_res_metrics_extension_fn ,
96113 default_req_metrics_config : self . default_req_metrics_config . clone ( ) ,
97114 default_res_metrics_config : self . default_res_metrics_config . clone ( ) ,
98115 }
0 commit comments