@@ -6,7 +6,7 @@ use bytes::Bytes;
6
6
use futures:: future:: BoxFuture ;
7
7
use futures:: { FutureExt , TryStreamExt } ;
8
8
use http:: header:: CONTENT_TYPE ;
9
- use http:: { response, Request , Response } ;
9
+ use http:: { response, HeaderName , HeaderValue , Request , Response } ;
10
10
use http_body_util:: { BodyExt , Either , Full } ;
11
11
use hyper:: body:: { Body , Frame , Incoming } ;
12
12
use hyper:: service:: Service ;
@@ -17,7 +17,12 @@ use std::ops::Deref;
17
17
use std:: pin:: Pin ;
18
18
use std:: task:: { ready, Context , Poll } ;
19
19
use tokio:: sync:: mpsc;
20
- use tracing:: warn;
20
+ use tracing:: { debug, warn} ;
21
+
22
+ #[ allow( clippy:: declare_interior_mutable_const) ]
23
+ const X_RESTATE_SERVER : HeaderName = HeaderName :: from_static ( "x-restate-server" ) ;
24
+ const X_RESTATE_SERVER_VALUE : HeaderValue =
25
+ HeaderValue :: from_static ( concat ! ( "restate-sdk-rust/" , env!( "CARGO_PKG_VERSION" ) ) ) ;
21
26
22
27
/// Wraps [`Endpoint`] to implement hyper [`Service`].
23
28
#[ derive( Clone ) ]
@@ -39,10 +44,11 @@ impl Service<Request<Incoming>> for HyperEndpoint {
39
44
let endpoint_response = match self . 0 . resolve ( parts. uri . path ( ) , parts. headers ) {
40
45
Ok ( res) => res,
41
46
Err ( err) => {
42
- // TODO log this
47
+ debug ! ( "Error when trying to handle incoming request: {err}" ) ;
43
48
return ready ( Ok ( Response :: builder ( )
44
49
. status ( err. status_code ( ) )
45
50
. header ( CONTENT_TYPE , "text/plain" )
51
+ . header ( X_RESTATE_SERVER , X_RESTATE_SERVER_VALUE )
46
52
. body ( Either :: Left ( Full :: new ( Bytes :: from ( err. to_string ( ) ) ) ) )
47
53
. expect ( "Headers should be valid" ) ) ) ;
48
54
}
@@ -80,7 +86,9 @@ impl Service<Request<Incoming>> for HyperEndpoint {
80
86
}
81
87
82
88
fn response_builder_from_response_head ( response_head : ResponseHead ) -> response:: Builder {
83
- let mut response_builder = Response :: builder ( ) . status ( response_head. status_code ) ;
89
+ let mut response_builder = Response :: builder ( )
90
+ . status ( response_head. status_code )
91
+ . header ( X_RESTATE_SERVER , X_RESTATE_SERVER_VALUE ) ;
84
92
85
93
for header in response_head. headers {
86
94
response_builder = response_builder. header ( header. key . deref ( ) , header. value . deref ( ) ) ;
0 commit comments