broadcasts on index page
Some checks failed
test / cargo test (push) Failing after 1m9s

This commit is contained in:
2024-10-03 20:59:01 +02:00
parent ceb3f4b89d
commit 2a043ae823
10 changed files with 110 additions and 22 deletions

View File

@ -1,3 +1,4 @@
pub mod post_listing;
pub mod post_parser;
pub mod segments;
pub mod tags;

View File

@ -32,6 +32,7 @@ where
}
}
#[derive(Clone)]
pub struct ParseResult<Metadata> {
pub body: String,
pub metadata: Metadata,

View File

@ -0,0 +1,51 @@
use std::rc::Rc;
use crate::blog_posts::blog_post_model::BlogPostMetadata;
use super::post_parser::ParseResult;
// // TODO convert segmetns to enum, find out how to serde to enum vlaue
// pub fn get_posts_by_segment(
// post_list: &Vec<ParseResult<BlogPostMetadata>>,
// segments: &Vec<String>,
// ) -> Vec<ParseResult<BlogPostMetadata>> {
// let mut filtered_posts: Vec<ParseResult<BlogPostMetadata>> = post_list
// .iter()
// .filter(|post| {
// segments
// .iter()
// .all(|segment| post.metadata.segments.contains(segment))
// }) // Filter by segments
// .filter(|post| post.metadata.published) // Filter only published posts
// .cloned()
// .collect();
// // Sort by date in descending order
// filtered_posts.sort_by_key(|post| post.metadata.date);
// filtered_posts.reverse();
// filtered_posts
// }
pub fn ref_get_posts_by_segment(
post_list: &[Rc<ParseResult<BlogPostMetadata>>],
segments: &[String],
) -> Vec<Rc<ParseResult<BlogPostMetadata>>> {
let mut filtered_posts: Vec<Rc<ParseResult<BlogPostMetadata>>> = post_list
.iter() // Use iter() to borrow instead of consuming the original vector
.filter(|post| {
let post = post.as_ref();
segments
.iter()
.all(|segment| post.metadata.segments.contains(segment))
}) // Filter by segments
.filter(|post| post.metadata.published) // Filter only published posts
.cloned()
.collect(); // Collect references to ParseResult<BlogPostMetadata>
// Sort by date in descending order
filtered_posts.sort_by_key(|post| post.metadata.date);
filtered_posts.reverse();
filtered_posts
}