Skip to main content

twine_models/
lib.rs

1//! # Twine Models
2//!
3//! Domain-specific models and model-building tools for
4//! [Twine](https://github.com/isentropic-dev/twine).
5//!
6//! This crate provides opinionated model implementations and supporting
7//! utilities organized around engineering domains.
8//!
9//! ## Crate layout
10//!
11//! - [`models`]: Domain-specific [`twine_core::Model`] implementations.
12//! - [`support`]: Supporting utilities used by models.
13//!
14//! ## Utility code lifecycle
15//!
16//! Modules in [`support`] are part of the public API because they're useful,
17//! but their APIs are not stable. Breaking changes may occur as needed.
18//!
19//! Utility code in this crate follows a natural progression as needs emerge:
20//!
21//! 1. **Model-specific**: Starts in a model's internal `core` module
22//! 2. **Domain-specific**: If useful across models in a domain (e.g., `turbomachinery`),
23//!    it moves to a domain-level support module
24//! 3. **Crate-level**: If useful across multiple domains or potentially useful
25//!    outside this crate, it moves to [`support`]
26//! 4. **Standalone**: If broadly useful and stable, it may become its own crate
27//!    (and be removed from here in a future release)
28//!
29//! Note: Only utilities at the crate-level (in [`support`]) are part of the public API.
30//! Model-specific and domain-specific utility code remains private.
31
32#[cfg(all(feature = "coolprop-dylib", feature = "coolprop-static"))]
33compile_error!(
34    "features `coolprop-dylib` and `coolprop-static` are mutually exclusive; \
35     enable one or the other, not both"
36);
37
38pub mod models;
39pub mod support;