@@ -3,7 +3,7 @@ mod routes;
33mod rss;
44
55use post:: { Post , QueryPost } ;
6- use routes:: { about, contact, main_page, post, Static , WellKnown } ;
6+ use routes:: { about, contact, main_page, post, posts_index , Static , WellKnown } ;
77use rss:: feed;
88
99use std:: env;
@@ -62,6 +62,7 @@ async fn main() {
6262
6363 let app = Router :: new ( )
6464 . route ( "/" , get ( main_page) )
65+ . route ( "/posts" , get ( posts_index) )
6566 . route ( "/about" , get ( about) )
6667 . route ( "/contact" , get ( contact) )
6768 . route ( "/post/:id" , get ( post) )
@@ -106,6 +107,28 @@ impl IntoResponse for MainPage {
106107 }
107108}
108109
110+ #[ derive( Debug , Clone ) ]
111+ struct PostsPage {
112+ title : String ,
113+ posts : Vec < Post > ,
114+ current_page : usize ,
115+ total_pages : usize ,
116+ }
117+
118+ impl IntoResponse for PostsPage {
119+ fn into_response ( self ) -> Response {
120+ let mut context = Context :: new ( ) ;
121+ context. insert ( "title" , & self . title ) ;
122+ context. insert ( "posts" , & self . posts ) ;
123+ context. insert ( "current_page" , & self . current_page ) ;
124+ context. insert ( "total_pages" , & self . total_pages ) ;
125+ let rendered = TEMPLATES
126+ . render ( "posts.html" , & context)
127+ . expect ( "Failed to render template" ) ;
128+ Html ( rendered) . into_response ( )
129+ }
130+ }
131+
109132#[ derive( RustEmbed ) ]
110133#[ folder = "templates/" ]
111134struct Templates ;
0 commit comments