Skip to main content

sbom_tools/
lib.rs

1//! sbom-tools: Semantic SBOM diff and analysis tool
2//!
3//! A format-agnostic SBOM comparison tool that provides semantic diff operations
4//! for CycloneDX and SPDX SBOMs with enterprise-grade reporting.
5//!
6//! # Quick Start
7//!
8//! ```no_run
9//! use sbom_tools::{parse_sbom, DiffEngine, FuzzyMatchConfig};
10//! use std::path::Path;
11//!
12//! // Parse two SBOMs
13//! let old = parse_sbom(Path::new("old.cdx.json")).unwrap();
14//! let new = parse_sbom(Path::new("new.cdx.json")).unwrap();
15//!
16//! // Compute semantic diff
17//! let engine = DiffEngine::new()
18//!     .with_fuzzy_config(FuzzyMatchConfig::balanced());
19//! let result = engine.diff(&old, &new).expect("diff failed");
20//!
21//! println!("Changes: {}", result.summary.total_changes);
22//! ```
23
24// Lint to discourage unwrap() in production code - prefer explicit error handling
25#![warn(clippy::unwrap_used)]
26
27pub mod cli;
28pub mod config;
29pub mod diff;
30#[cfg(feature = "enrichment")]
31pub mod enrichment;
32pub mod error;
33pub mod matching;
34pub mod model;
35pub mod parsers;
36pub mod pipeline;
37pub mod quality;
38pub mod reports;
39pub mod tui;
40pub mod utils;
41
42// Re-export main types for convenience
43pub use config::{AppConfig, AppConfigBuilder, ConfigPreset, EnrichmentConfig, TuiConfig};
44pub use config::{
45    BehaviorConfig, FilterConfig, GraphAwareDiffConfig, MatchingConfig, MatchingRulesPathConfig,
46    OutputConfig,
47};
48pub use config::{ConfigError, Validatable};
49pub use config::{DiffConfig, MatrixConfig, MultiDiffConfig, TimelineConfig, ViewConfig};
50pub use diff::{DiffEngine, DiffResult, GraphDiffConfig};
51#[cfg(feature = "enrichment")]
52pub use enrichment::{
53    EnricherConfig, EnrichmentStats, NoOpEnricher, OsvEnricher, OsvEnricherConfig,
54    VulnerabilityEnricher,
55};
56pub use error::{ErrorContext, OptionContext, Result, SbomDiffError};
57pub use matching::{
58    ComponentMatcher, FuzzyMatchConfig, FuzzyMatcher, MatchResult, MatchTier, MatchingRulesConfig,
59    RuleEngine,
60};
61pub use model::{
62    CanonicalId, Component, ComponentSortKey, NormalizedSbom, NormalizedSbomIndex, SbomIndexBuilder,
63};
64pub use parsers::{parse_sbom, parse_sbom_str, SbomParser};
65pub use quality::{QualityGrade, QualityReport, QualityScorer, ScoringProfile};
66#[allow(deprecated)]
67pub use reports::{ReportFormat, ReportGenerator, StreamingReporter, WriterReporter};
68
69// TUI shared ViewModel exports for building custom TUI components
70pub use tui::{
71    CycleFilter, FilterState, ListNavigation, ListState, OverlayState, SearchState,
72    SearchStateCore, StatusMessage, ViewModelOverlayKind,
73};