1- use std:: { fs:: OpenOptions , io:: Write } ;
1+ mod handlers;
2+ mod request;
3+ mod router;
4+
5+ use handlers:: * ;
6+ use request:: Request ;
7+ use router:: Router ;
28
39fn main ( ) -> anyhow:: Result < ( ) > {
410 // File Storage kullanımı
511
612 let fs_handler = Box :: new ( FileStorageHandler {
7- base_path : ". " . into ( ) ,
13+ file_name : "route_datas.log " . into ( ) ,
814 } ) ;
915
1016 let mut router = Router :: new ( fs_handler) ;
@@ -29,68 +35,3 @@ fn main() -> anyhow::Result<()> {
2935
3036 Ok ( ( ) )
3137}
32-
33- pub struct Request {
34- pub path : String ,
35- pub data : Vec < u8 > ,
36- }
37-
38- pub trait RouteHandler {
39- fn handle ( & self , request : & Request ) -> anyhow:: Result < ( ) > ;
40- }
41-
42- pub struct FileStorageHandler {
43- pub base_path : String ,
44- }
45-
46- impl RouteHandler for FileStorageHandler {
47- fn handle ( & self , request : & Request ) -> anyhow:: Result < ( ) > {
48- let mut file = OpenOptions :: new ( )
49- . append ( true )
50- . create ( true )
51- . open ( "request_logs.dat" ) ?;
52- file. write_all ( & request. data ) ?;
53- Ok ( ( ) )
54- }
55- }
56-
57- pub struct PassToRemoteHandler {
58- pub target_uri : String ,
59- }
60-
61- impl RouteHandler for PassToRemoteHandler {
62- fn handle ( & self , request : & Request ) -> anyhow:: Result < ( ) > {
63- println ! (
64- "Pretending to POST to {}{} with {} bytes" ,
65- self . target_uri,
66- request. path,
67- request. data. len( )
68- ) ;
69-
70- Ok ( ( ) )
71- }
72- }
73-
74- pub struct Router {
75- requests : Vec < Request > ,
76- handler : Box < dyn RouteHandler > ,
77- }
78-
79- impl Router {
80- pub fn new ( handler : Box < dyn RouteHandler > ) -> Self {
81- Router {
82- requests : Vec :: new ( ) ,
83- handler,
84- }
85- }
86- pub fn add ( & mut self , request : Request ) {
87- self . requests . push ( request) ;
88- }
89-
90- pub fn apply ( & self ) -> anyhow:: Result < ( ) > {
91- for r in self . requests . iter ( ) {
92- self . handler . handle ( & r) ?;
93- }
94- Ok ( ( ) )
95- }
96- }
0 commit comments