noema 0.4.0

Noema IOC and DI framework for Rust
Documentation
//! Noema — Rust DI/IoC toolkit (compile-time wiring, `Arc<T>`, thread-safe).
//!
//! # Dependency injection (`di`, default)
//!
//! Register dependencies with lifecycle macros and resolve them with [`resolve`]:
//!
//! ```ignore
//! dependency!(singleton, MyService);
//! dependency_as!(singleton, Logger: ConsoleLogger);
//! dependency_as_many!(Validator: [(singleton, EmailValidator), (transient, SmsValidator)]);
//! dependency_keyed_as!(PaymentKey, Payment: [(PaymentKey::Stripe, singleton, StripeImpl)]);
//!
//! let svc = resolve::<MyService>();
//! let all = resolve::<Arc<[Arc<dyn Validator + Send + Sync>]>>();
//! let pay = resolve::<Keyed<PaymentKey, dyn Payment + Send + Sync>>().one(PaymentKey::Stripe);
//! ```
//!
//! Full syntax guide: [`docs/di.md`](docs/di.md).
//!
//! # Other features
//!
//! - [`mediator`] — MediatR-style request/response (`Input` / `InputHandler` / `send`)
//! - [`events`] — Typed publish/subscribe over user-owned transports (JSON v1)
//! - [`config`] — Typed configuration from env or async providers (`config!` / `load`)
//! - [`items_collections`] — Extensible enum-like collections (`items!` / `ItemSet`)

extern crate self as noema;

pub mod core;

#[cfg(feature = "di")]
pub mod di;

#[cfg(feature = "mediator")]
pub mod mediator;

#[cfg(feature = "events")]
pub mod events;

#[cfg(feature = "configurations")]
pub mod config;

#[cfg(feature = "events")]
pub use paste;

#[cfg(feature = "items_collections")]
pub mod items_collections;

#[cfg(feature = "items_collections")]
pub use items_collections::{Collection, DynItem, Item, ItemSet};

#[cfg(feature = "di")]
pub use di::Keyed;
#[cfg(feature = "di")]
pub use di::resolve;

#[cfg(feature = "mediator")]
pub use mediator::send;

#[cfg(feature = "events")]
pub use events::event;

#[cfg(feature = "configurations")]
pub use config::{ConfigError, ConfigSource, Configurable, EnvSource, MapSource, load};

#[cfg(feature = "configurations")]
#[doc(hidden)]
pub use async_trait;

#[cfg(feature = "configurations")]
#[doc(hidden)]
pub use ctor;