library_usage/
library_usage.rs1use axum::Router;
2use phantom_frame::{cache::RefreshTrigger, create_proxy, CreateProxyConfig};
3
4#[tokio::main]
5async fn main() {
6 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(), ])
17 .with_exclude_paths(vec![
18 "/api/admin/*".to_string(),
19 "POST *".to_string(), "PUT *".to_string(), "DELETE *".to_string(), ])
23 .with_websocket_enabled(true); let (proxy_app, refresh_trigger): (Router, RefreshTrigger) = create_proxy(proxy_config);
27
28 let trigger_clone = refresh_trigger.clone();
30
31 tokio::spawn(async move {
33 tokio::time::sleep(tokio::time::Duration::from_secs(60)).await;
34
35 trigger_clone.trigger();
37 println!("All cache cleared!");
38
39 tokio::time::sleep(tokio::time::Duration::from_secs(30)).await;
40
41 trigger_clone.trigger_by_key_match("GET:/api/*");
43 println!("Cache cleared for GET:/api/* pattern!");
44 });
45
46 let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
48
49 println!("Proxy server listening on http://0.0.0.0:3000");
50 println!("Caching paths: /api/*, /public/*, GET /admin/stats");
51 println!("Excluding: /api/admin/*, POST *, PUT *, DELETE *");
52 println!("Note: Only GET requests will be cached (POST/PUT/DELETE are excluded)");
53 println!("WebSocket support: enabled");
54
55 axum::serve(listener, proxy_app).await.unwrap();
56}