pinakes-core: simplify extract_aliases; return Vec<String> directly
Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: I020c7dc647ba7f2c4b45a951c23cb2226a6a6964
This commit is contained in:
parent
d6665c73ff
commit
b09b405a5d
1 changed files with 36 additions and 35 deletions
|
|
@ -12,7 +12,6 @@ use std::path::Path;
|
|||
use regex::Regex;
|
||||
use uuid::Uuid;
|
||||
|
||||
use crate::error::Result;
|
||||
use crate::model::{LinkType, MarkdownLink, MediaId};
|
||||
|
||||
/// Configuration for context extraction around links
|
||||
|
|
@ -279,36 +278,40 @@ pub fn resolve_link_candidates(
|
|||
///
|
||||
/// Obsidian uses the `aliases` field in frontmatter to define alternative names
|
||||
/// for a note that can be used in wikilinks.
|
||||
pub fn extract_aliases(content: &str) -> Result<Vec<String>> {
|
||||
let parsed = gray_matter::Matter::<gray_matter::engine::YAML>::new().parse(content);
|
||||
pub fn extract_aliases(content: &str) -> Vec<String> {
|
||||
let Ok(parsed) = gray_matter::Matter::<gray_matter::engine::YAML>::new().parse(content) else {
|
||||
return Vec::new();
|
||||
};
|
||||
|
||||
if let Some(data) = parsed.ok().and_then(|p| p.data) {
|
||||
if let gray_matter::Pod::Hash(map) = data {
|
||||
if let Some(aliases) = map.get("aliases") {
|
||||
match aliases {
|
||||
gray_matter::Pod::Array(arr) => {
|
||||
return Ok(arr
|
||||
.iter()
|
||||
.filter_map(|a| {
|
||||
if let gray_matter::Pod::String(s) = a {
|
||||
Some(s.clone())
|
||||
} else {
|
||||
None
|
||||
}
|
||||
})
|
||||
.collect());
|
||||
}
|
||||
gray_matter::Pod::String(s) => {
|
||||
// Single alias as string
|
||||
return Ok(vec![s.clone()]);
|
||||
}
|
||||
_ => {}
|
||||
let Some(data) = parsed.data else {
|
||||
return Vec::new();
|
||||
};
|
||||
|
||||
let gray_matter::Pod::Hash(map) = data else {
|
||||
return Vec::new();
|
||||
};
|
||||
|
||||
let Some(aliases) = map.get("aliases") else {
|
||||
return Vec::new();
|
||||
};
|
||||
|
||||
match aliases {
|
||||
gray_matter::Pod::Array(arr) => arr
|
||||
.iter()
|
||||
.filter_map(|a| {
|
||||
if let gray_matter::Pod::String(s) = a {
|
||||
Some(s.clone())
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
})
|
||||
.collect(),
|
||||
gray_matter::Pod::String(s) => {
|
||||
// Single alias as string
|
||||
vec![s.clone()]
|
||||
}
|
||||
_ => Vec::new(),
|
||||
}
|
||||
|
||||
Ok(Vec::new())
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
|
@ -408,11 +411,9 @@ And an embedded image: ![[diagram.png]]
|
|||
|
||||
// Should include relative path and .md variations
|
||||
assert!(!candidates.is_empty());
|
||||
assert!(
|
||||
candidates
|
||||
.iter()
|
||||
.any(|p| p.to_string_lossy().contains("My Note.md"))
|
||||
);
|
||||
assert!(candidates
|
||||
.iter()
|
||||
.any(|p| p.to_string_lossy().contains("My Note.md")));
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
@ -426,7 +427,7 @@ aliases:
|
|||
|
||||
# Content here
|
||||
"#;
|
||||
let aliases = extract_aliases(content).unwrap();
|
||||
let aliases = extract_aliases(content);
|
||||
assert_eq!(aliases, vec!["Alternative Name", "Another Alias"]);
|
||||
}
|
||||
|
||||
|
|
@ -439,7 +440,7 @@ aliases: Single Alias
|
|||
|
||||
# Content
|
||||
"#;
|
||||
let aliases = extract_aliases(content).unwrap();
|
||||
let aliases = extract_aliases(content);
|
||||
assert_eq!(aliases, vec!["Single Alias"]);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue