@@ -20,7 +20,6 @@ use hyper::{
2020use phper:: {
2121 alloc:: { EBox , RefClone , ToRefOwned } ,
2222 classes:: { ClassEntry , StatefulClass , Visibility } ,
23- errors:: Error :: Throw ,
2423 functions:: Argument ,
2524 values:: ZVal ,
2625} ;
@@ -48,12 +47,17 @@ pub fn make_server_class() -> StatefulClass<Option<Builder<AddrIncoming>>> {
4847 . add_method ( "__construct" , Visibility :: Public , |this, arguments| {
4948 let host = arguments[ 0 ] . expect_z_str ( ) ?;
5049 let port = arguments[ 1 ] . expect_long ( ) ?;
50+
5151 this. set_property ( "host" , host. to_owned ( ) ) ;
5252 this. set_property ( "port" , port) ;
53- let addr = format ! ( "{}:{}" , host. to_str( ) ?, port) . parse :: < SocketAddr > ( ) ?;
53+
54+ let addr = format ! ( "{}:{}" , host. to_str( ) ?, port)
55+ . parse :: < SocketAddr > ( )
56+ . map_err ( |e| HttpServerError ( Box :: new ( e) ) ) ?;
5457 let builder = Server :: bind ( & addr) ;
5558 * this. as_mut_state ( ) = Some ( builder) ;
56- Ok :: < _ , HttpServerError > ( ( ) )
59+
60+ Ok :: < _ , phper:: Error > ( ( ) )
5761 } )
5862 . arguments ( [ Argument :: by_val ( "host" ) , Argument :: by_val ( "port" ) ] ) ;
5963
@@ -73,7 +77,7 @@ pub fn make_server_class() -> StatefulClass<Option<Builder<AddrIncoming>>> {
7377
7478 let make_svc = make_service_fn ( move |_conn| async move {
7579 Ok :: < _ , Infallible > ( service_fn ( move |_: Request < Body > | async move {
76- match async move {
80+ let fut = async move {
7781 let handle = unsafe { HANDLE . load ( Ordering :: SeqCst ) . as_mut ( ) . unwrap ( ) } ;
7882
7983 let request =
@@ -85,21 +89,16 @@ pub fn make_server_class() -> StatefulClass<Option<Builder<AddrIncoming>>> {
8589 let response_val = response. to_ref_owned ( ) ;
8690 let response_val = ZVal :: from ( response_val) ;
8791
88- match handle. call ( [ request, response_val] ) {
89- Err ( Throw ( ex) ) => {
90- let state = unsafe { response. as_mut_state :: < Response < Body > > ( ) } ;
91- * state. status_mut ( ) = StatusCode :: INTERNAL_SERVER_ERROR ;
92- * state. body_mut ( ) = ex. to_string ( ) . into ( ) ;
93- }
94- Err ( e) => return Err ( e. into ( ) ) ,
95- _ => { }
96- }
92+ if let Err ( err) = handle. call ( [ request, response_val] ) {
93+ let state = unsafe { response. as_mut_state :: < Response < Body > > ( ) } ;
94+ * state. status_mut ( ) = StatusCode :: INTERNAL_SERVER_ERROR ;
95+ * state. body_mut ( ) = err. to_string ( ) . into ( ) ;
96+ } ;
9797
9898 let response = replace_and_get ( unsafe { response. as_mut_state ( ) } ) ;
99- Ok :: < Response < Body > , HttpServerError > ( response)
100- }
101- . await
102- {
99+ Ok :: < Response < Body > , phper:: Error > ( response)
100+ } ;
101+ match fut. await {
103102 Ok ( response) => Ok :: < Response < Body > , Infallible > ( response) ,
104103 Err ( e) => {
105104 let mut response = Response :: new ( "" . into ( ) ) ;
@@ -112,9 +111,11 @@ pub fn make_server_class() -> StatefulClass<Option<Builder<AddrIncoming>>> {
112111 } ) ;
113112
114113 let server = builder. serve ( make_svc) ;
115- Handle :: current ( ) . block_on ( server) ?;
114+ Handle :: current ( )
115+ . block_on ( server)
116+ . map_err ( |e| HttpServerError ( Box :: new ( e) ) ) ?;
116117
117- Ok :: < _ , HttpServerError > ( ( ) )
118+ Ok :: < _ , phper :: Error > ( ( ) )
118119 } ) ;
119120
120121 class
0 commit comments