Skip to main content

cabin_core/
lib.rs

1//! Stable internal data model for Cabin.
2//!
3//! This crate defines the validated, format-agnostic types that the rest of
4//! the workspace builds on. Manifest parsing, the CLI, and (later) the build
5//! graph all consume the same `Package` value, so changes here ripple
6//! everywhere — keep this surface small.
7//!
8//! Crate boundaries:
9//! - this crate must not depend on `clap`, `toml`, or any raw manifest
10//!   Structs;
11//! - manifest-shaped serde structs live in `cabin-manifest`;
12//! - CLI dispatch lives in `cabin`.
13
14#![allow(clippy::return_self_not_must_use)]
15
16pub mod build_flags;
17pub mod build_jobs;
18pub mod compiler;
19pub mod compiler_wrapper;
20pub mod condition;
21pub mod config;
22pub mod config_source;
23pub mod error;
24pub mod hash;
25pub mod model;
26pub mod patch;
27pub mod profile;
28pub mod registry;
29pub mod source_language;
30pub mod source_replacement;
31pub mod term_color;
32pub mod term_verbosity;
33pub mod toolchain;
34pub mod version_req;
35
36pub use build_flags::{
37    BuildFlagsValidationError, ConditionalProfileFlags, ProfileFlags, ProfileSettings,
38    ResolvedProfileFlags, resolve_build_flags,
39};
40pub use build_jobs::{BuildJobs, BuildJobsParseError};
41pub use compiler::{
42    ArchiverCapabilities, ArchiverIdentity, ArchiverKind, Capability, CapabilitySource,
43    CompilerCapabilities, CompilerIdentity, CompilerKind, CompilerVersion, ToolDetection,
44    ToolDetectionError, ToolchainDetectionReport, derive_ar_capabilities, derive_cxx_capabilities,
45    parse_ar_version_output, parse_cxx_version_output, validate_ar_for_backend,
46    validate_cc_for_backend, validate_cxx_for_backend,
47};
48pub use compiler_wrapper::{
49    CompilerWrapperIdentity, CompilerWrapperKind, CompilerWrapperManifestSettings,
50    CompilerWrapperParseError, CompilerWrapperRequest, CompilerWrapperSource,
51    CompilerWrapperSummary, ConditionalCompilerWrapperDecl, ResolvedCompilerWrapper,
52};
53pub use condition::{Condition, ConditionKey, ConditionParseError, TargetPlatform};
54pub use config::{
55    BuildConfiguration, BuildConfigurationInput, DEFAULT_FEATURE_KEY, FeatureEntry, Features,
56    InvalidFeatureEntryKind, SelectionRequest, ToolchainSummary,
57};
58pub use config_source::ConfigValueSource;
59pub use error::ValidationError;
60pub use model::{
61    Dependency, DependencyKind, DependencySource, Package, PackageConfigInput, PackageName,
62    PortDepSource, SystemDependency, Target, TargetKind, TargetName, is_path_safe_package_name,
63};
64pub use patch::{
65    DeclaredPatch, PatchManifestSettings, PatchProvenance, PatchSource, PatchSourceKind,
66    PatchValidationError,
67};
68pub use profile::{
69    BuiltinProfile, InvalidProfileName, OptLevel, ProfileDefaults, ProfileDefinition, ProfileName,
70    ProfileResolutionError, ProfileSelection, ProfileSource, ResolvedProfile,
71    available_profile_names, resolve_profile,
72};
73pub use source_language::{SourceLanguage, classify_source, link_driver_language};
74pub use source_replacement::{
75    SourceLocator, SourceReplacementEntry, SourceReplacementError, SourceReplacementResolution,
76    SourceReplacementSettings,
77};
78pub use term_color::{ColorChoice, ColorEnvError, InvalidColorChoice};
79pub use term_verbosity::{InvalidVerbosityCombination, Verbosity, VerbosityEnvError};
80pub use toolchain::{
81    ConditionalToolchainDecl, ResolvedTool, ResolvedToolchain, ToolKind, ToolSelection, ToolSource,
82    ToolSpec, ToolchainDecl, ToolchainResolutionError, ToolchainSelection, ToolchainSettings,
83};