bookyard-core 0.1.0

Core configuration and catalog model for Bookyard.
Documentation
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(())
}