mod build;
mod catalog;
mod config;
mod discover;
mod error;
mod model;
mod paths;
pub use build::{BuildItem, BuildOptions, BuildPlan, build_shelf, create_build_plan};
pub use catalog::{Catalog, CatalogBook, FolderNode, build_catalog, build_folder_tree};
pub use config::{CONFIG_FILE, load_config, save_config};
pub use discover::{DetectedBookSource, detect_book_source};
pub use error::{BookyardError, Result};
pub use model::{BookConfig, BookEngine, BookyardConfig, BuildConfig, WorkspaceConfig};
pub use paths::slugify_book_id;
pub fn insert_book(config: &mut BookyardConfig, book: BookConfig) -> Result<()> {
if config.books.iter().any(|existing| existing.id == book.id) {
return Err(BookyardError::DuplicateBookId(book.id));
}
config.books.push(book);
config
.books
.sort_by(|a, b| a.order.cmp(&b.order).then_with(|| a.title.cmp(&b.title)));
Ok(())
}