pub mod agent;
pub mod artifacts;
pub mod config;
pub mod content;
mod error;
pub mod favicon;
mod html;
pub mod markdown;
pub mod output;
pub mod render;
pub mod scaffold;
pub mod serve;
#[doc(hidden)]
pub mod testutil;
pub use error::Error;
use std::path::Path;
use config::Config;
use render::{BuiltSite, Theme};
pub async fn build(config_path: &Path, output_dir: &Path) -> Result<(), Error> {
let config = Config::from_path(config_path)?;
let theme = Theme::load(&config)?;
let built = BuiltSite::build(&config, &theme)?;
if !built.diagnostics.is_empty() {
return Err(Error::BrokenWikiLinks(
built.diagnostics.broken_wiki_links.clone(),
));
}
tracing::info!(output = %output_dir.display(), "writing output");
let writer = output::OutputWriter::new(output_dir)?;
writer.write(&built, &theme, &config.static_dir)?;
tracing::info!("build complete");
Ok(())
}
pub async fn serve(config_path: &Path, port: u16) -> Result<(), Error> {
serve::Server::new(config_path)?.run(port).await
}
pub fn scaffold_new(name: &str, agent: Option<agent::AgentTool>) -> Result<(), Error> {
scaffold::new(name, agent)
}
pub fn scaffold_init(path: &Path, agent: Option<agent::AgentTool>) -> Result<(), Error> {
scaffold::init(path, agent)
}
pub fn agent_init(tool: agent::AgentTool, dir: &Path) -> Result<(), Error> {
agent::init(tool, dir)
}
pub fn new_blog_post(config_path: &Path, title: &str) -> Result<(), Error> {
scaffold::new_blog_post(config_path, title)
}
pub fn new_wiki_page(config_path: &Path, title: &str) -> Result<(), Error> {
scaffold::new_wiki_page(config_path, title)
}
pub fn new_page(config_path: &Path, title: &str) -> Result<(), Error> {
scaffold::new_page(config_path, title)
}