uv_sbom/lib.rs
1//! uv-sbom - SBOM generation tool for uv projects
2//!
3//! This library provides functionality to generate Software Bill of Materials (SBOM)
4//! from uv.lock files, following hexagonal architecture and Domain-Driven Design principles.
5//!
6//! # Architecture
7//!
8//! The library is organized into the following layers:
9//!
10//! - **Domain Layer** (`sbom_generation`): Pure business logic and domain models
11//! - **Application Layer** (`application`): Use cases and application services
12//! - **Ports** (`ports`): Interface definitions for infrastructure
13//! - **Adapters** (`adapters`): Concrete implementations of ports
14//! - **Shared** (`shared`): Common utilities and error types
15//!
16//! # Example
17//!
18//! ```no_run
19//! use uv_sbom::prelude::*;
20//! use std::path::PathBuf;
21//!
22//! # #[tokio::main]
23//! # async fn main() -> Result<()> {
24//! // Create adapters
25//! let lockfile_reader = FileSystemReader::new();
26//! let project_config_reader = FileSystemReader::new();
27//! let license_repository = PyPiLicenseRepository::new()?;
28//! let progress_reporter = StderrProgressReporter::new(uv_sbom::i18n::Locale::default());
29//!
30//! // Create use case
31//! let use_case: GenerateSbomUseCase<_, _, _, _, ()> = GenerateSbomUseCase::new(
32//! lockfile_reader,
33//! project_config_reader,
34//! license_repository,
35//! progress_reporter,
36//! None, // No vulnerability checking in this example
37//! uv_sbom::i18n::Locale::default(),
38//! );
39//!
40//! // Execute
41//! let request = SbomRequest::builder()
42//! .project_path(".")
43//! .build()?;
44//! let response = use_case.execute(request).await?;
45//!
46//! // Build read model and format output
47//! let read_model = uv_sbom::application::read_models::SbomReadModelBuilder::build(
48//! response.enriched_packages,
49//! &response.metadata,
50//! None,
51//! None,
52//! None,
53//! );
54//! let formatter = CycloneDxFormatter::new();
55//! let output = formatter.format(&read_model)?;
56//! println!("{}", output);
57//! # Ok(())
58//! # }
59//! ```
60
61pub mod adapters;
62pub mod application;
63pub mod config;
64pub mod i18n;
65pub mod ports;
66pub mod sbom_generation;
67pub mod shared;
68
69/// Prelude module for convenient imports
70pub mod prelude {
71 pub use crate::adapters::outbound::console::StderrProgressReporter;
72 pub use crate::adapters::outbound::filesystem::{
73 FileSystemReader, FileSystemWriter, StdoutPresenter,
74 };
75 pub use crate::adapters::outbound::formatters::{CycloneDxFormatter, MarkdownFormatter};
76 pub use crate::adapters::outbound::network::PyPiLicenseRepository;
77 pub use crate::application::dto::{
78 OutputFormat, SbomRequest, SbomRequestBuilder, SbomResponse,
79 };
80 pub use crate::application::factories::{FormatterFactory, PresenterFactory, PresenterType};
81 pub use crate::application::use_cases::GenerateSbomUseCase;
82 pub use crate::ports::outbound::{
83 LicenseRepository, LockfileParseResult, LockfileReader, OutputPresenter, ProgressReporter,
84 ProjectConfigReader, SbomFormatter,
85 };
86 pub use crate::sbom_generation::domain::{
87 DependencyGraph, LicenseInfo, Package, PackageName, SbomMetadata,
88 };
89 pub use crate::sbom_generation::policies::LicensePriority;
90 pub use crate::sbom_generation::services::{DependencyAnalyzer, SbomGenerator};
91 pub use crate::shared::Result;
92}