/*
    Appellation: eryon-actors <library>
    Contrib: @FL03
*/
//! # eryon-actors
//!
//! This crate works to establish a sound foundation for computational entities within the
//! `eryon` framework.
//!
//! ## Features
//!
//! - `neural`: enables machine-learning capabilities for actors.
//!
#![allow(
    clippy::missing_saftey_doc,
    clippy::module_inception,
    clippy::needless_doctest_main,
    clippy::should_implement_trait,
    clippy::upper_case_acronyms
)]
#![cfg_attr(not(feature = "std"), no_std)]
#![cfg_attr(all(feature = "nightly"), feature(allocator_api))]
#[cfg(feature = "alloc")]
extern crate alloc;

extern crate concision as cnc;
extern crate eryon_core as eryon;

pub(crate) use eryon as core;
pub(crate) use eryon::rstmt::nrt;
pub(crate) use eryon_mem as mem;

#[doc(inline)]
pub use eryon_surface as surface;

#[doc(inline)]
pub use self::{
    ctx::prelude::*,
    drivers::prelude::*,
    engine::prelude::*,
    error::*,
    operators::prelude::*,
    surface::{SurfaceModel, SurfaceNetwork, traits::*},
    traits::*,
    types::*,
    vnode::*,
};

#[macro_use]
pub(crate) mod macros {
    #[macro_use]
    pub mod seal;
}

pub mod ctx;
pub mod drivers;
pub mod engine;
pub mod error;
pub mod operators;
pub mod vnode;

pub mod traits {
    //! this module defines the traits of the actors.
    #[doc(inline)]
    pub use self::prelude::*;

    pub(crate) mod actor;
    pub(crate) mod store;

    pub(crate) mod prelude {
        pub use super::actor::*;
        pub use super::store::*;
    }
}

pub mod types {
    //! this module contains the various types implemented in-support of the actors
    #[doc(inline)]
    pub use self::prelude::*;

    pub(crate) mod hierarchy;
    pub(crate) mod rulespace;
    pub(crate) mod snapshot;
    pub(crate) mod stability;
    pub(crate) mod vstats;

    pub(crate) mod prelude {
        pub use super::hierarchy::*;
        pub use super::rulespace::*;
        pub use super::snapshot::*;
        pub use super::stability::*;
        pub use super::vstats::*;
    }
}

#[doc(hidden)]
pub mod prelude {
    pub use eryon_surface::prelude::*;

    pub use crate::vnode::*;

    pub use crate::drivers::prelude::*;
    pub use crate::engine::prelude::*;
    pub use crate::operators::prelude::*;
    pub use crate::traits::*;
    pub use crate::types::*;
}
