diff --git a/src/blog_post/definition.rs b/src/blog_post/definition.rs new file mode 100644 index 0000000..4c7da73 --- /dev/null +++ b/src/blog_post/definition.rs @@ -0,0 +1,61 @@ +#[derive(Debug)] +struct BlogPost { + id: String, +} + +impl BlogPost { + pub(crate) async fn load_blog_post, R: AsRef>( + root_dir: R, + post_dir: P, + ) -> Result> { + async fn inner( + root_dir: &Path, + post_dir: &Path, + ) -> Result> { + let org_files = { + let mut ret = Vec::new(); + let org_files_iter = get_org_files(post_dir)?; + for entry in org_files_iter { + ret.push(entry.await??); + } + ret + }; + let parsed_org_files = { + let mut ret = Vec::new(); + for (path, contents) in org_files.iter() { + let parsed = organic::parser::parse_file(contents.as_str(), Some(path))?; + ret.push((path, contents, parsed)); + } + ret + }; + + Ok(BlogPost { + id: "foo".to_owned(), + }) + } + inner(root_dir.as_ref(), post_dir.as_ref()).await + } +} + +fn get_org_files>( + root_dir: P, +) -> Result>>, walkdir::Error> { + let org_files = WalkDir::new(root_dir) + .into_iter() + .filter(|e| match e { + Ok(dir_entry) => { + dir_entry.file_type().is_file() + && Path::new(dir_entry.file_name()) + .extension() + .map(|ext| ext.to_ascii_lowercase() == "org") + .unwrap_or(false) + } + Err(_) => true, + }) + .collect::, _>>()?; + let org_files = org_files + .into_iter() + .map(walkdir::DirEntry::into_path) + .map(|path| tokio::spawn(read_file(path))); + Ok(org_files) +} diff --git a/src/blog_post/mod.rs b/src/blog_post/mod.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/main.rs b/src/main.rs index 76d095c..b16e9cb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,6 +6,7 @@ use self::cli::parameters::Cli; use self::cli::parameters::Commands; use self::command::build::build_site; use self::command::init::init_writer_folder; +mod blog_post; mod cli; mod command; mod config;