broadcasts segments enum
This commit is contained in:
@ -1,35 +1,50 @@
|
||||
use std::rc::Rc;
|
||||
use std::{fmt::Display, rc::Rc};
|
||||
|
||||
use crate::blog_posts::blog_post_model::BlogPostMetadata;
|
||||
use crate::blog_posts::blog_post_model::{BlogPostMetadata, Segment};
|
||||
|
||||
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();
|
||||
impl Segment {
|
||||
fn as_str(&self) -> &'static str {
|
||||
match self {
|
||||
Segment::Blog => "blog",
|
||||
Segment::Broadcasts => "broadcasts",
|
||||
Segment::Featured => "featured",
|
||||
Segment::Cookbook => "cookbook",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// // Sort by date in descending order
|
||||
// filtered_posts.sort_by_key(|post| post.metadata.date);
|
||||
// filtered_posts.reverse();
|
||||
impl Display for Segment {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
|
||||
write!(f, "{}", self.as_str())
|
||||
}
|
||||
}
|
||||
|
||||
// filtered_posts
|
||||
// }
|
||||
pub fn get_posts_by_segment(
|
||||
post_list: Vec<ParseResult<BlogPostMetadata>>,
|
||||
segments: &[Segment],
|
||||
) -> Vec<ParseResult<BlogPostMetadata>> {
|
||||
let mut filtered_posts: Vec<ParseResult<BlogPostMetadata>> = post_list
|
||||
.into_iter()
|
||||
.filter(|post| {
|
||||
segments
|
||||
.iter()
|
||||
.all(|segment| post.metadata.segments.contains(segment))
|
||||
}) // Filter by segments
|
||||
.filter(|post| post.metadata.published) // Filter only published posts
|
||||
.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],
|
||||
segments: &[Segment],
|
||||
) -> 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
|
||||
|
@ -2,11 +2,11 @@ use axum::http::StatusCode;
|
||||
use std::collections::HashMap;
|
||||
use tracing::debug;
|
||||
|
||||
use crate::blog_posts::blog_post_model::{BlogPostMetadata, BLOG_POST_PATH};
|
||||
use crate::blog_posts::blog_post_model::{BlogPostMetadata, Segment, BLOG_POST_PATH};
|
||||
|
||||
use super::{post_listing::get_post_list, post_parser::ParseResult};
|
||||
|
||||
pub async fn get_popular_tags(segment: Option<String>) -> Result<Vec<String>, StatusCode> {
|
||||
pub async fn get_popular_tags(segment: Option<Segment>) -> Result<Vec<String>, StatusCode> {
|
||||
const TAGS_LENGTH: usize = 7;
|
||||
|
||||
let mut post_list = get_post_list::<BlogPostMetadata>(BLOG_POST_PATH).await?;
|
||||
|
Reference in New Issue
Block a user