Prelude Module
Relevant source files
The Prelude Module provides convenient glob imports for the core I/O traits in the axio crate. This module serves as a single import point for the four fundamental I/O traits (Read
, Write
, Seek
, and BufRead
), following the same pattern as Rust's standard library std::io::prelude
module.
For information about the individual I/O traits themselves, see Core I/O Traits. For details about error handling that works with these traits, see Error Handling.
Purpose and Design
The prelude module eliminates the need for multiple individual trait imports by providing a single glob import that brings all essential I/O traits into scope. This design pattern reduces boilerplate code in modules that perform extensive I/O operations.
Module Structure
flowchart TD subgraph subGraph3["Client Code"] CLIENT["use axio::prelude::*"] USAGE["All traits available"] end subgraph subGraph2["axio Crate Root"] LIB["src/lib.rs"] subgraph subGraph1["Prelude Module"] PRELUDE_MOD["src/prelude.rs"] REEXPORT["pub use super::{BufRead, Read, Seek, Write}"] end subgraph subGraph0["Core Traits Definition"] READ["Read trait"] WRITE["Write trait"] SEEK["Seek trait"] BUFREAD["BufRead trait"] end end BUFREAD --> REEXPORT CLIENT --> USAGE LIB --> BUFREAD LIB --> PRELUDE_MOD LIB --> READ LIB --> SEEK LIB --> WRITE PRELUDE_MOD --> CLIENT READ --> REEXPORT SEEK --> REEXPORT WRITE --> REEXPORT
Sources: src/lib.rs(L16) src/prelude.rs(L11)
Trait Re-export Implementation
The prelude module uses a simple re-export mechanism to make the core traits available through a single import path. The implementation consists of a single pub use
statement that imports all four traits from the parent module:
Trait | Purpose | Key Methods |
---|---|---|
Read | Reading bytes from a source | read(),read_exact(),read_to_end() |
Write | Writing bytes to a destination | write(),flush(),write_all() |
Seek | Positioning within a stream | seek(),rewind(),stream_position() |
BufRead | Buffered reading operations | fill_buf(),consume(),read_until() |
Sources: src/prelude.rs(L11) src/lib.rs(L152 - L355)
Usage Patterns
Standard Import Pattern
The prelude follows the conventional Rust pattern for convenience imports:
use axio::prelude::*;
This single import brings all four core I/O traits into scope, enabling their methods to be called on any type that implements them.
Integration with no_std Environment
The prelude module maintains compatibility with no_std
environments while providing conditional access to allocation-dependent features:
flowchart TD subgraph subGraph3["Feature Compilation"] NO_ALLOC["default features"] WITH_ALLOC["alloc feature enabled"] end subgraph subGraph2["Import Resolution"] GLOB["use axio::prelude::*"] subgraph subGraph1["Method Availability"] CORE_METHODS["Core methods always available"] ALLOC_METHODS["Allocation methods (feature-gated)"] end subgraph subGraph0["Available Traits"] READ_TRAIT["Read trait"] WRITE_TRAIT["Write trait"] SEEK_TRAIT["Seek trait"] BUFREAD_TRAIT["BufRead trait"] end end BUFREAD_TRAIT --> ALLOC_METHODS BUFREAD_TRAIT --> CORE_METHODS GLOB --> BUFREAD_TRAIT GLOB --> READ_TRAIT GLOB --> SEEK_TRAIT GLOB --> WRITE_TRAIT NO_ALLOC --> CORE_METHODS READ_TRAIT --> ALLOC_METHODS READ_TRAIT --> CORE_METHODS SEEK_TRAIT --> CORE_METHODS WITH_ALLOC --> ALLOC_METHODS WITH_ALLOC --> CORE_METHODS WRITE_TRAIT --> CORE_METHODS
Sources: src/prelude.rs(L1 - L12) src/lib.rs(L7 - L8) src/lib.rs(L21 - L22)
Implementation Details
Module Declaration
The prelude module is declared as a public module in the crate root, making it accessible to external users:
src/lib.rs(L16) - pub mod prelude;
Re-export Mechanism
The module uses Rust's pub use
syntax to re-export traits from the parent module scope:
src/prelude.rs(L11) - pub use super::{BufRead, Read, Seek, Write};
This creates public aliases for the traits defined in the parent module, allowing them to be imported through the prelude path.
Documentation Integration
The prelude module includes comprehensive documentation that explains its purpose and provides usage examples, following the same documentation style as std::io::prelude
:
src/prelude.rs(L1 - L9) - Contains module-level documentation with purpose explanation and usage example.
Relationship to Standard Library
The axio prelude module mirrors the design and purpose of Rust's standard library std::io::prelude
module, providing a familiar interface for developers transitioning between std
and no_std
environments:
flowchart TD subgraph subGraph2["Design Pattern"] PATTERN["Convenience re-exports"] GLOB_IMPORT["Glob import usage"] end subgraph axio["axio"] AXIO_PRELUDE["axio::prelude"] AXIO_TRAITS["axio I/O traits"] end subgraph std::io["std::io"] STD_PRELUDE["std::io::prelude"] STD_TRAITS["std I/O traits"] end AXIO_PRELUDE --> PATTERN AXIO_TRAITS --> AXIO_PRELUDE PATTERN --> GLOB_IMPORT STD_PRELUDE --> PATTERN STD_TRAITS --> STD_PRELUDE
Sources: src/prelude.rs(L8) src/prelude.rs(L11)
This design maintains API compatibility and familiar usage patterns while providing the no_std
compatibility that axio offers.