Skip to main content

injectable_rs_runtime/
lib.rs

1//! Runtime types and core traits for the `injectable` framework.
2//!
3//! This crate provides the foundational abstractions:
4//! - [`Injectable`] — marker trait for types that can be dependency-injected
5//! - [`Provider`] — async trait for constructing values
6//! - [`DynProvider`] — closure-based provider for external types
7//! - [`ProviderRegistry`] — registry for dynamically-registered providers
8//! - [`Extract`] — Axum-inspired extractor trait
9//! - [`Inject`] — wrapper providing shared (`Arc`) access to dependencies
10//! - [`ResolveContext`] — the resolution context holding singleton storage
11//! - [`SingletonStore`] — trait for generated typed singleton storage
12
13#![forbid(unsafe_code)]
14#![deny(missing_docs)]
15
16mod error;
17mod extract;
18mod factory_ctx;
19mod inject;
20mod injectable;
21mod lifecycle;
22mod provider;
23mod registry;
24mod resolve;
25mod singleton;
26
27#[cfg(feature = "axum")]
28mod axum;
29
30pub use error::{InjectableError, InjectableResult};
31pub use extract::Extract;
32pub use factory_ctx::FactoryCtx;
33pub use inject::Inject;
34pub use injectable::Injectable;
35pub use lifecycle::{HookResult, PostConstruct, PreDestruct};
36pub use provider::{DynProvider, Provider};
37pub use registry::{
38    DEFAULT_TOKEN, InjectableArcFactory, InjectableHooksEntry, InjectableProvideFnPtr,
39    MakePreDestructFnPtr, PostConstructFnPtr, ProviderRegistry,
40};
41pub use resolve::ResolveContext;
42pub use singleton::{EmptySingletonStore, RequestScoped, Singleton, SingletonStore, Transient};
43
44#[cfg(feature = "axum")]
45pub use axum::{InjectableRejection, InjectableState};
46
47/// Re-exported `inventory` crate so generated macro code can use
48/// `injectable_rs_runtime::inventory::submit!` for static collection.
49#[doc(hidden)]
50pub use inventory;