pub struct CreateProxyConfig {
pub proxy_url: String,
pub include_paths: Vec<String>,
pub exclude_paths: Vec<String>,
pub cache_key_fn: Arc<dyn Fn(&RequestInfo<'_>) -> String + Send + Sync>,
}Expand description
Configuration for creating a proxy
Fields§
§proxy_url: StringThe backend URL to proxy requests to
include_paths: Vec<String>Paths to include in caching (empty means include all) Supports wildcards and method prefixes: “/api/”, “POST /api/”, “GET /*/users”, etc.
exclude_paths: Vec<String>Paths to exclude from caching (empty means exclude none) Supports wildcards and method prefixes: “/admin/*”, “POST ”, “PUT /api/”, etc. Exclude overrides include
cache_key_fn: Arc<dyn Fn(&RequestInfo<'_>) -> String + Send + Sync>Custom cache key generator Takes request info and returns a cache key Default: method + path + query string
Implementations§
Source§impl CreateProxyConfig
impl CreateProxyConfig
Sourcepub fn new(proxy_url: String) -> Self
pub fn new(proxy_url: String) -> Self
Create a new config with default settings
Examples found in repository?
examples/library_usage.rs (line 11)
5async fn main() {
6 // Initialize tracing (optional but recommended)
7 // tracing_subscriber::fmt::init();
8
9 // Create proxy configuration
10 // You can specify method prefixes to filter by HTTP method
11 let proxy_config = CreateProxyConfig::new("http://localhost:8080".to_string())
12 .with_include_paths(vec![
13 "/api/*".to_string(),
14 "/public/*".to_string(),
15 "GET /admin/stats".to_string(), // Only cache GET requests to this endpoint
16 ])
17 .with_exclude_paths(vec![
18 "/api/admin/*".to_string(),
19 "POST *".to_string(), // Don't cache any POST requests
20 "PUT *".to_string(), // Don't cache any PUT requests
21 "DELETE *".to_string(), // Don't cache any DELETE requests
22 ]);
23
24 // Create proxy - proxy_url is the backend server to proxy requests to
25 let (proxy_app, refresh_trigger): (Router, RefreshTrigger) = create_proxy(proxy_config);
26
27 // You can clone and use the refresh_trigger in your code
28 let trigger_clone = refresh_trigger.clone();
29
30 // Example: Trigger cache refresh from another part of your application
31 tokio::spawn(async move {
32 tokio::time::sleep(tokio::time::Duration::from_secs(60)).await;
33
34 // Clear all cache entries
35 trigger_clone.trigger();
36 println!("All cache cleared!");
37
38 tokio::time::sleep(tokio::time::Duration::from_secs(30)).await;
39
40 // Clear only cache entries matching a pattern (supports wildcards)
41 trigger_clone.trigger_by_key_match("GET:/api/*");
42 println!("Cache cleared for GET:/api/* pattern!");
43 });
44
45 // Start the proxy server
46 let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
47
48 println!("Proxy server listening on http://0.0.0.0:3000");
49 println!("Caching paths: /api/*, /public/*, GET /admin/stats");
50 println!("Excluding: /api/admin/*, POST *, PUT *, DELETE *");
51 println!("Note: Only GET requests will be cached (POST/PUT/DELETE are excluded)");
52
53 axum::serve(listener, proxy_app).await.unwrap();
54}Sourcepub fn with_include_paths(self, paths: Vec<String>) -> Self
pub fn with_include_paths(self, paths: Vec<String>) -> Self
Set include paths
Examples found in repository?
examples/library_usage.rs (lines 12-16)
5async fn main() {
6 // Initialize tracing (optional but recommended)
7 // tracing_subscriber::fmt::init();
8
9 // Create proxy configuration
10 // You can specify method prefixes to filter by HTTP method
11 let proxy_config = CreateProxyConfig::new("http://localhost:8080".to_string())
12 .with_include_paths(vec![
13 "/api/*".to_string(),
14 "/public/*".to_string(),
15 "GET /admin/stats".to_string(), // Only cache GET requests to this endpoint
16 ])
17 .with_exclude_paths(vec![
18 "/api/admin/*".to_string(),
19 "POST *".to_string(), // Don't cache any POST requests
20 "PUT *".to_string(), // Don't cache any PUT requests
21 "DELETE *".to_string(), // Don't cache any DELETE requests
22 ]);
23
24 // Create proxy - proxy_url is the backend server to proxy requests to
25 let (proxy_app, refresh_trigger): (Router, RefreshTrigger) = create_proxy(proxy_config);
26
27 // You can clone and use the refresh_trigger in your code
28 let trigger_clone = refresh_trigger.clone();
29
30 // Example: Trigger cache refresh from another part of your application
31 tokio::spawn(async move {
32 tokio::time::sleep(tokio::time::Duration::from_secs(60)).await;
33
34 // Clear all cache entries
35 trigger_clone.trigger();
36 println!("All cache cleared!");
37
38 tokio::time::sleep(tokio::time::Duration::from_secs(30)).await;
39
40 // Clear only cache entries matching a pattern (supports wildcards)
41 trigger_clone.trigger_by_key_match("GET:/api/*");
42 println!("Cache cleared for GET:/api/* pattern!");
43 });
44
45 // Start the proxy server
46 let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
47
48 println!("Proxy server listening on http://0.0.0.0:3000");
49 println!("Caching paths: /api/*, /public/*, GET /admin/stats");
50 println!("Excluding: /api/admin/*, POST *, PUT *, DELETE *");
51 println!("Note: Only GET requests will be cached (POST/PUT/DELETE are excluded)");
52
53 axum::serve(listener, proxy_app).await.unwrap();
54}Sourcepub fn with_exclude_paths(self, paths: Vec<String>) -> Self
pub fn with_exclude_paths(self, paths: Vec<String>) -> Self
Set exclude paths
Examples found in repository?
examples/library_usage.rs (lines 17-22)
5async fn main() {
6 // Initialize tracing (optional but recommended)
7 // tracing_subscriber::fmt::init();
8
9 // Create proxy configuration
10 // You can specify method prefixes to filter by HTTP method
11 let proxy_config = CreateProxyConfig::new("http://localhost:8080".to_string())
12 .with_include_paths(vec![
13 "/api/*".to_string(),
14 "/public/*".to_string(),
15 "GET /admin/stats".to_string(), // Only cache GET requests to this endpoint
16 ])
17 .with_exclude_paths(vec![
18 "/api/admin/*".to_string(),
19 "POST *".to_string(), // Don't cache any POST requests
20 "PUT *".to_string(), // Don't cache any PUT requests
21 "DELETE *".to_string(), // Don't cache any DELETE requests
22 ]);
23
24 // Create proxy - proxy_url is the backend server to proxy requests to
25 let (proxy_app, refresh_trigger): (Router, RefreshTrigger) = create_proxy(proxy_config);
26
27 // You can clone and use the refresh_trigger in your code
28 let trigger_clone = refresh_trigger.clone();
29
30 // Example: Trigger cache refresh from another part of your application
31 tokio::spawn(async move {
32 tokio::time::sleep(tokio::time::Duration::from_secs(60)).await;
33
34 // Clear all cache entries
35 trigger_clone.trigger();
36 println!("All cache cleared!");
37
38 tokio::time::sleep(tokio::time::Duration::from_secs(30)).await;
39
40 // Clear only cache entries matching a pattern (supports wildcards)
41 trigger_clone.trigger_by_key_match("GET:/api/*");
42 println!("Cache cleared for GET:/api/* pattern!");
43 });
44
45 // Start the proxy server
46 let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
47
48 println!("Proxy server listening on http://0.0.0.0:3000");
49 println!("Caching paths: /api/*, /public/*, GET /admin/stats");
50 println!("Excluding: /api/admin/*, POST *, PUT *, DELETE *");
51 println!("Note: Only GET requests will be cached (POST/PUT/DELETE are excluded)");
52
53 axum::serve(listener, proxy_app).await.unwrap();
54}Sourcepub fn with_cache_key_fn<F>(self, f: F) -> Self
pub fn with_cache_key_fn<F>(self, f: F) -> Self
Set custom cache key function
Trait Implementations§
Source§impl Clone for CreateProxyConfig
impl Clone for CreateProxyConfig
Source§fn clone(&self) -> CreateProxyConfig
fn clone(&self) -> CreateProxyConfig
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
impl Freeze for CreateProxyConfig
impl !RefUnwindSafe for CreateProxyConfig
impl Send for CreateProxyConfig
impl Sync for CreateProxyConfig
impl Unpin for CreateProxyConfig
impl !UnwindSafe for CreateProxyConfig
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more