phoxal_model/lib.rs
1//! Canonical immutable runtime robot model.
2//!
3//! The model is constructed by source/build tooling and decoded from the
4//! bundle's `manifest.json`. [`manifest`] owns that document: its schema tag
5//! and the envelope around the [`Robot`] body. `phoxal-bundle` owns where the
6//! file sits and how it is read.
7//!
8//! # Paths
9//!
10//! Concepts live in the module that owns them: [`asset`], [`builder`],
11//! [`component`], [`identity`], [`manifest`], [`robot`], [`simulation`],
12//! [`structure`].
13//!
14//! The crate root is a deliberate facade over the handful of names a consumer
15//! meets first, so that loading, reading or composing a robot does not require
16//! learning the module layout. Those names - and the error vocabulary, whose
17//! module is private precisely so the root is its only path - are the canonical
18//! ones; write `phoxal_model::Robot`, not `phoxal_model::robot::Robot`.
19//! Everything else is named through its owning module.
20//!
21//! Modules inside this crate import from the owning module, never through this
22//! facade.
23
24mod error;
25
26pub mod asset;
27pub mod builder;
28pub mod component;
29pub mod footprint;
30pub mod identity;
31pub mod manifest;
32pub mod robot;
33pub mod simulation;
34pub mod structure;
35
36#[doc(hidden)]
37pub mod compiler;
38
39pub use asset::AssetId;
40pub use builder::RobotBuilder;
41pub use component::capability::CapabilityRole;
42pub use error::{
43 IdentifierKind, JointOwner, KinematicScalarField, LinkRole, ModelError, MotionLimitField,
44 PoseOwner, StructureError,
45};
46pub use footprint::FootprintEnvelope;
47pub use manifest::ManifestDocument;
48pub use robot::Robot;