(wip) add content loader
parent
3c22c723ad
commit
ce20464337
@ -0,0 +1,56 @@
|
||||
use std::{collections::HashMap, path::PathBuf};
|
||||
|
||||
use async_walkdir::{Filtering, WalkDir};
|
||||
use futures::{future, StreamExt};
|
||||
use serde::Deserialize;
|
||||
|
||||
#[derive(Deserialize)]
|
||||
pub struct TemplateName(String);
|
||||
|
||||
impl AsRef<str> for TemplateName {
|
||||
fn as_ref(&self) -> &str {
|
||||
&self.0
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
pub struct Page {
|
||||
template: TemplateName,
|
||||
#[serde(flatten)]
|
||||
data: HashMap<String, toml::Value>,
|
||||
}
|
||||
|
||||
pub struct ContentLoader {
|
||||
path: PathBuf,
|
||||
}
|
||||
|
||||
impl ContentLoader {
|
||||
pub fn new(path: PathBuf) -> Self {
|
||||
Self { path }
|
||||
}
|
||||
|
||||
async fn load_pages(&self) -> Vec<Page> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
async fn find_files(&self) -> Vec<PathBuf> {
|
||||
WalkDir::new(&self.path)
|
||||
.filter(|e| async move {
|
||||
e.path()
|
||||
.extension()
|
||||
.map(|e| {
|
||||
if e == "toml" {
|
||||
Filtering::Continue
|
||||
} else {
|
||||
Filtering::Ignore
|
||||
}
|
||||
})
|
||||
.unwrap_or(Filtering::Ignore)
|
||||
})
|
||||
.map(|e| e.expect("failed to read dir").path())
|
||||
.collect::<Vec<_>>()
|
||||
.await
|
||||
}
|
||||
}
|
||||
|
||||
fn parse_page(path: PathBuf) {}
|
Loading…
Reference in New Issue