fix generic

This commit is contained in:
Mylloon 2024-11-09 15:43:29 +01:00
parent 8b5c128bfd
commit 8e1b036386
Signed by: Anri
GPG key ID: A82D63DFF8D1317F

View file

@ -335,12 +335,17 @@ fn deserialize_metadata<T: Default + serde::de::DeserializeOwned>(text: &str) ->
/// Fetch metadata from AST /// Fetch metadata from AST
pub fn get_metadata<'a>(root: &'a AstNode<'a>, mtype: &TypeFileMetadata) -> FileMetadata { pub fn get_metadata<'a>(root: &'a AstNode<'a>, mtype: &TypeFileMetadata) -> FileMetadata {
root.children() root.children()
.find_map(|node| match &node.data.borrow().value { .map(|node| {
let generic = FileMetadata {
hardbreaks: true,
..FileMetadata::default()
};
match &node.data.borrow().value {
// Extract metadata from frontmatter // Extract metadata from frontmatter
NodeValue::FrontMatter(text) => Some(match mtype { NodeValue::FrontMatter(text) => match mtype {
TypeFileMetadata::Blog => { TypeFileMetadata::Blog => {
let metadata: FileMetadataBlog = deserialize_metadata(text); let metadata: FileMetadataBlog = deserialize_metadata(text);
FileMetadata { FileMetadata {
blog: Some(metadata.clone()), blog: Some(metadata.clone()),
hardbreaks: metadata.hardbreaks.unwrap_or_default(), hardbreaks: metadata.hardbreaks.unwrap_or_default(),
@ -349,21 +354,16 @@ pub fn get_metadata<'a>(root: &'a AstNode<'a>, mtype: &TypeFileMetadata) -> File
} }
TypeFileMetadata::Contact => { TypeFileMetadata::Contact => {
let mut metadata: FileMetadataContact = deserialize_metadata(text); let mut metadata: FileMetadataContact = deserialize_metadata(text);
// Trim descriptions // Trim descriptions
if let Some(desc) = &mut metadata.description { if let Some(desc) = &mut metadata.description {
desc.clone_from(&desc.trim().into()); desc.clone_from(&desc.trim().into());
} }
FileMetadata { FileMetadata {
contact: Some(metadata), contact: Some(metadata),
..FileMetadata::default() ..FileMetadata::default()
} }
} }
TypeFileMetadata::Generic => FileMetadata { TypeFileMetadata::Generic => generic,
hardbreaks: true,
..FileMetadata::default()
},
TypeFileMetadata::Index => FileMetadata { TypeFileMetadata::Index => FileMetadata {
index: Some(deserialize_metadata(text)), index: Some(deserialize_metadata(text)),
..FileMetadata::default() ..FileMetadata::default()
@ -372,9 +372,11 @@ pub fn get_metadata<'a>(root: &'a AstNode<'a>, mtype: &TypeFileMetadata) -> File
portfolio: Some(deserialize_metadata(text)), portfolio: Some(deserialize_metadata(text)),
..FileMetadata::default() ..FileMetadata::default()
}, },
}), },
_ => None, _ => generic,
}
}) })
.next()
.map_or_else( .map_or_else(
|| match mtype { || match mtype {
TypeFileMetadata::Blog => FileMetadata { TypeFileMetadata::Blog => FileMetadata {