pub mod cli;
#[cfg(feature = "restore")]
pub mod extractor;
pub mod filewalker;
pub mod utils;
pub mod writer;
#[cfg(feature = "git")]
pub mod git;
#[cfg(feature = "mdbook")]
pub mod mdbook;
pub use cli::Config;
#[cfg(feature = "restore")]
pub use extractor::extract_from_markdown;
pub use filewalker::collect_files;
pub use writer::{MarkdownWriter, OUTPUT_MAGIC_BYTES, OUTPUT_MAGIC_HEADER};
#[cfg(feature = "git")]
pub use git::{ClonedRepo, clone_repository, repo_name_from_url};
#[cfg(feature = "mdbook")]
pub use mdbook::generate_mdbook;
use anyhow::Result;
use log::error;
use tokio::fs::File;
use tokio::io::BufWriter;
pub async fn run_src2md(config: Config) -> Result<()> {
let file = File::create(&config.output_path).await?;
let buf_writer = BufWriter::new(file);
let mut md_writer = MarkdownWriter::new(buf_writer);
let entries = collect_files(
&config.project_root,
config.ignore_file.as_ref(),
&config.specific_paths,
Some(&config.output_path),
&config.extensions,
)?;
for entry in entries {
if let Err(e) = md_writer.write_entry(&entry, &config.project_root).await {
if config.fail_fast {
return Err(e);
}
error!("Failed to write {}: {e}", entry.path().display());
}
}
md_writer.flush().await?;
Ok(())
}
pub async fn run_src2md_on_path(
project_root: std::path::PathBuf,
output_path: std::path::PathBuf,
ignore_file: Option<std::path::PathBuf>,
extensions: &std::collections::HashSet<String>,
fail_fast: bool,
) -> Result<()> {
let file = File::create(&output_path).await?;
let buf_writer = BufWriter::new(file);
let mut md_writer = MarkdownWriter::new(buf_writer);
let entries = collect_files(
&project_root,
ignore_file.as_ref(),
&std::collections::HashSet::new(),
Some(&output_path),
extensions,
)?;
for entry in entries {
if let Err(e) = md_writer.write_entry(&entry, &project_root).await {
if fail_fast {
return Err(e);
}
error!("Failed to write {}: {e}", entry.path().display());
}
}
md_writer.flush().await?;
Ok(())
}