//! # cadrum
//!
//! Rust CAD library powered by OpenCASCADE (OCCT 8.0.0-rc5).
//!
//! ## Core Types
//! - [`Solid`] — a single solid shape (wraps `TopoDS_Shape` / `TopAbs_SOLID`)
//! - [`Solid`] has all methods directly (no trait import needed)

pub mod common;
#[cfg(not(feature = "pure"))]
pub mod occt;
#[cfg(feature = "pure")]
pub mod pure;
pub(crate) mod traits;
// `Transform` is intentionally NOT re-exported. It remains reachable only as
// `crate::traits::Transform` for internal use; external callers reach the same
// surface through `Compound` / `Wire` forwarder default methods. See the
// `Transform` doc comment in `traits.rs` for the rationale and the future
// auto-delegation plan.
pub use traits::{BSplineEnd, Compound, ProfileOrient, Wire};

// Re-export backend types at crate root
#[cfg(not(feature = "pure"))]
pub use occt::edge::Edge;
#[cfg(not(feature = "pure"))]
pub use occt::face::Face;
#[cfg(not(feature = "pure"))]
use occt::io::Io; // private: used by generated delegation, not exposed to users
#[cfg(not(feature = "pure"))]
pub use occt::solid::Solid;

// Re-export common types
#[cfg(feature = "color")]
pub use common::color::Color;
pub use common::error::Error;
pub use common::mesh::{EdgeData, Mesh};
// Re-export glam types used in cadrum's public API. Users should reach glam
// through these re-exports (or the `cadrum::glam` module below) instead of
// adding a direct `glam` dependency — otherwise a mismatched glam minor
// version pulls in two incompatible `glam` crates and call sites fail with
// "expected `cadrum::DVec3`, found `glam::DVec3`".
pub use glam::{DMat3, DMat4, DQuat, DVec2, DVec3};
pub use glam;

// Auto-generated inherent method delegations (trait methods → pub fn on concrete types)
include!(concat!(env!("OUT_DIR"), "/generated_delegation.rs"));
