//! Domain layer - Pure business logic with no external dependencies //! //! This module contains the core business domain for the StA relay control system. //! It follows **Domain-Driven Design** principles with rich domain models and clear //! ubiquitous language. //! //! # Architecture Principles //! //! - **No external dependencies**: Domain layer depends only on Rust standard library //! - **Inward-pointing dependencies**: Infrastructure/Application depend on Domain, never reverse //! - **Rich domain models**: Entities and value objects encapsulate business rules //! - **Ubiquitous language**: Code reflects real-world relay control domain concepts //! //! # Planned Submodules //! //! - `relay`: Core relay domain (RelayId, RelayState, RelayLabel, Relay entity) //! - Value objects with validation (newtypes following TyDD principles) //! - Domain entities (Relay, RelayCollection) //! - Repository traits (RelayLabelRepository) //! - Controller traits (RelayController) //! - Domain errors (DomainError, ValidationError) //! //! # Type-Driven Development (TyDD) //! //! Domain types follow "make illegal states unrepresentable" principle: //! - `RelayId`: Newtype wrapping u8, validated to 1..=8 range //! - `RelayLabel`: String wrapper, validated max 50 chars //! - `RelayState`: Enum (On, Off) - no invalid states possible //! //! See `specs/001-modbus-relay-control/types-design.md` for complete type design. //! //! # References //! //! - Architecture: `specs/constitution.md` - Hexagonal Architecture principles //! - Type design: `specs/001-modbus-relay-control/types-design.md` //! - Domain specification: `specs/001-modbus-relay-control/spec.md` pub mod health; pub mod modbus; pub mod relay;