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// Pedantic lints: allow categories that are design choices for this codebase
27#![allow(
28    // Cast safety: usize↔f64/f32/u16/i32 casts are pervasive in TUI layout math
29    // and statistical calculations — all values are bounded in practice
30    clippy::cast_precision_loss,
31    clippy::cast_possible_truncation,
32    clippy::cast_sign_loss,
33    clippy::cast_possible_wrap,
34    // Doc completeness: # Errors / # Panics sections are aspirational for 78+15 fns
35    clippy::missing_errors_doc,
36    clippy::missing_panics_doc,
37    // TUI render functions are inherently long — splitting hurts readability
38    clippy::too_many_lines,
39    // State structs legitimately use many bools for toggle flags
40    clippy::struct_excessive_bools,
41    clippy::fn_params_excessive_bools,
42    // self is kept for API consistency / future use across trait-like impls
43    clippy::unused_self,
44    // Variable names like `min`/`mid` or `old`/`new` are clear in context
45    clippy::similar_names
46)]
47
48pub mod cli;
49pub mod config;
50pub mod diff;
51#[cfg(feature = "enrichment")]
52pub mod enrichment;
53pub mod error;
54pub mod matching;
55pub mod model;
56pub mod parsers;
57pub mod pipeline;
58pub mod quality;
59pub mod reports;
60pub mod tui;
61pub mod utils;
62
63// Re-export main types for convenience
64pub use config::{AppConfig, AppConfigBuilder, ConfigPreset, EnrichmentConfig, TuiConfig};
65pub use config::{
66    BehaviorConfig, FilterConfig, GraphAwareDiffConfig, MatchingConfig, MatchingRulesPathConfig,
67    OutputConfig,
68};
69pub use config::{ConfigError, Validatable};
70pub use config::{DiffConfig, MatrixConfig, MultiDiffConfig, TimelineConfig, ViewConfig};
71pub use diff::{DiffEngine, DiffResult, GraphDiffConfig};
72#[cfg(feature = "enrichment")]
73pub use enrichment::{
74    EnricherConfig, EnrichmentStats, NoOpEnricher, OsvEnricher, OsvEnricherConfig,
75    VulnerabilityEnricher,
76};
77pub use error::{ErrorContext, OptionContext, Result, SbomDiffError};
78pub use matching::{
79    ComponentMatcher, FuzzyMatchConfig, FuzzyMatcher, MatchResult, MatchTier, MatchingRulesConfig,
80    RuleEngine,
81};
82pub use model::{
83    CanonicalId, Component, ComponentSortKey, NormalizedSbom, NormalizedSbomIndex, SbomIndexBuilder,
84};
85pub use parsers::{parse_sbom, parse_sbom_str, SbomParser};
86pub use quality::{QualityGrade, QualityReport, QualityScorer, ScoringProfile};
87#[allow(deprecated)]
88pub use reports::{ReportFormat, ReportGenerator, StreamingReporter, WriterReporter};
89
90// TUI shared ViewModel exports for building custom TUI components
91pub use tui::{
92    CycleFilter, FilterState, ListNavigation, ListState, OverlayState, SearchState,
93    SearchStateCore, StatusMessage, ViewModelOverlayKind,
94};