Skip to main content

gen_types/
lib.rs

1//! gen-types — typed IR for the universal package-manager → build-
2//! system engine.
3//!
4//! Foundation crate. Every adapter (gen-cargo, gen-npm, gen-bundler,
5//! gen-pip, gen-gomod, gen-helm, …) emits this shape; every renderer
6//! (gen-nix-incremental, gen-nix-bulk, gen-bazel, …) consumes it;
7//! every cache backend (gen-cache-attic, gen-cache-cachix, …) keys
8//! on it.
9//!
10//! ## Shape
11//!
12//! ```text
13//! Manifest (1)
14//!   └─ packages: Vec<Package>             (one per crate / gem / wheel / etc.)
15//!         ├─ source: PackageSource        (Registry | Git | Path | Local)
16//!         ├─ dependencies: Vec<Dependency>
17//!         │     ├─ constraint: VersionConstraint
18//!         │     ├─ kind: DependencyKind   (Direct | Build | Dev | Optional | Peer)
19//!         │     ├─ features_enabled: Vec<String>
20//!         │     └─ target_predicate: Option<TargetPredicate>
21//!         ├─ features: Vec<Feature>
22//!         └─ build_steps: Vec<BuildStep>
23//!   └─ lockfile: Option<Lockfile>
24//! ```
25//!
26//! Every adapter is a thin Manifest-producer; every renderer is a
27//! thin Manifest-to-Derivation translator. The trait surface stays
28//! narrow.
29
30#![allow(clippy::module_name_repetitions)]
31
32pub mod adapter;
33pub mod constraint;
34pub mod dependency;
35pub mod derivation;
36pub mod dispatcher;
37pub mod ecosystem;
38pub mod feature;
39pub mod lock_lifecycle;
40pub mod lockfile;
41pub mod manifest;
42pub mod package;
43pub mod registry;
44pub mod source;
45pub mod target;
46pub mod version;
47pub mod workspace;
48
49pub use adapter::{
50    Adapter, AdapterCtx, AdapterError, AdapterQuirkEntry, AdapterRegistration, AdapterResult,
51    BuildSpec as AdapterBuildSpec, ConfirmReport, DepChange, DepEdge, DependencyBump, DiffRef,
52    DiffReport, DispatcherVariant, InvariantBreak, LockOutcome, Plan, PlanIntent, PlanWarning,
53    PlanWarningSeverity, Sbom, SbomFormat, adapter_by_name, registered_adapter_names,
54    registered_adapters,
55};
56pub use constraint::{Combinator, CompoundConstraint, ConstraintSpec, VersionConstraint};
57pub use dependency::{Dependency, DependencyKind};
58pub use derivation::{
59    BuildCommand, BuildScript, BuildStep, BuildStepKind, Derivation, DerivationRef,
60};
61pub use dispatcher::TypedDispatcher;
62pub use ecosystem::{Invariants, QuirkRegistry, Spec};
63pub use feature::{Feature, FeatureRef};
64pub use lock_lifecycle::{LockError, LockLifecyclePrimitive};
65pub use lockfile::{ContentHash, Lockfile, ResolvedPackage};
66pub use manifest::Manifest;
67pub use package::{Package, PackageId};
68pub use registry::Registry;
69pub use source::PackageSource;
70pub use target::{CompoundTargetPredicate, PredicateCombinator, Target, TargetPredicate};
71pub use version::Version;
72pub use workspace::Workspace;