@@ -24,7 +24,35 @@ use super::{
2424/// A simple trait for rewriting requests that works with our specific request type
2525pub trait RequestRewriter : Send + Sync {
2626 /// Rewrite the given request and return the modified request
27- fn rewrite_request ( & self , request : Request ) -> Result < Request , http_rewriter:: RewriteError > ;
27+ ///
28+ /// The docroot parameter is used by conditions like ExistenceCondition that need
29+ /// to check for files on the filesystem.
30+ fn rewrite_request (
31+ & self ,
32+ request : Request ,
33+ docroot : & Path ,
34+ ) -> Result < Request , http_rewriter:: RewriteError > ;
35+ }
36+
37+ /// Blanket implementation: any type implementing http_rewriter::Rewriter
38+ /// automatically implements RequestRewriter for our concrete Request type.
39+ impl < T > RequestRewriter for T
40+ where
41+ T : http_rewriter:: Rewriter ,
42+ {
43+ fn rewrite_request (
44+ & self ,
45+ request : Request ,
46+ docroot : & Path ,
47+ ) -> Result < Request , http_rewriter:: RewriteError > {
48+ use http_handler:: extensions:: DocumentRoot ;
49+ use http_handler:: RequestExt ;
50+ let mut request = request;
51+ request. set_document_root ( DocumentRoot {
52+ path : docroot. to_path_buf ( ) ,
53+ } ) ;
54+ http_rewriter:: Rewriter :: rewrite ( self , request)
55+ }
2856}
2957
3058/// Embed a PHP script into a Rust application to handle HTTP requests.
@@ -62,7 +90,7 @@ impl Embed {
6290 ///
6391 /// ```
6492 /// use std::env::current_dir;
65- /// use php ::Embed;
93+ /// use php_node ::Embed;
6694 ///
6795 /// let docroot = current_dir()
6896 /// .expect("should have current_dir");
@@ -85,7 +113,7 @@ impl Embed {
85113 ///
86114 /// ```
87115 /// use std::env::{args, current_dir};
88- /// use php ::Embed;
116+ /// use php_node ::Embed;
89117 ///
90118 /// let docroot = current_dir()
91119 /// .expect("should have current_dir");
@@ -109,7 +137,7 @@ impl Embed {
109137 ///
110138 /// ```
111139 /// use std::env::current_dir;
112- /// use php ::{Embed, Handler, Request, Response};
140+ /// use php_node ::{Embed, Handler, Request, Response};
113141 ///
114142 /// let docroot = current_dir()
115143 /// .expect("should have current_dir");
@@ -146,7 +174,7 @@ impl Embed {
146174 ///
147175 /// ```rust
148176 /// use std::env::current_dir;
149- /// use php ::Embed;
177+ /// use php_node ::Embed;
150178 ///
151179 /// let docroot = current_dir()
152180 /// .expect("should have current_dir");
@@ -171,7 +199,7 @@ impl Handler for Embed {
171199 ///
172200 /// ```
173201 /// use std::{env::temp_dir, fs::File, io::Write};
174- /// use php ::{Embed, Handler, Request, Response, MockRoot};
202+ /// use php_node ::{Embed, Handler, Request, Response, MockRoot};
175203 ///
176204 /// let docroot = MockRoot::builder()
177205 /// .file("index.php", "<?php echo \"Hello, World!\"; ?>")
@@ -210,7 +238,7 @@ impl Handler for Embed {
210238 let mut request = request. clone ( ) ;
211239 if let Some ( rewriter) = & self . rewriter {
212240 request = rewriter
213- . rewrite_request ( request)
241+ . rewrite_request ( request, & self . docroot )
214242 . map_err ( |e| EmbedRequestError :: RequestRewriteError ( e. to_string ( ) ) ) ?;
215243 }
216244
0 commit comments