async_file
Asynchronous file I/O operations with priority handling.
async_file
provides a simple yet powerful API for performing asynchronous file operations
in Rust. It closely follows the standard library's file API design while adding async
support and priority-based scheduling.
Features
- Async Operations: All file operations are asynchronous, allowing for non-blocking I/O
- Priority Scheduling: Every operation accepts a priority parameter for fine-grained control
- Memory Safety: Uses an opaque
Data
type to safely handle OS-managed memory allocations - Platform Agnostic: Backend-agnostic API with a default std implementation
Quick Start
use ;
// Open a file with unit test priority
let file = open.await?;
// Read up to 1KB of data
let data = file.read.await?;
println!;
Design Philosophy
This library enforces that only one operation may be in-flight at a time per file handle. This constraint simplifies the implementation and prevents many classes of concurrency bugs.
The library uses opaque types (File
, Data
, Metadata
) that wrap platform-specific
implementations, providing a clean abstraction layer while maintaining efficiency.
API Overview
File Operations
use ;
use SeekFrom;
// Open a file
let mut file = open.await?;
// Read data
let data = file.read.await?;
// Seek to position
let pos = file.seek.await?;
// Get metadata
let metadata = file.metadata.await?;
println!;
// Read entire file
let contents = file.read_all.await?;
Memory Management
The Data
type provides safe access to OS-managed memory:
let data = file.read.await?;
// Access as a slice
let bytes: & = data.as_ref;
// Convert to owned data (may require copying)
let boxed: = data.into_boxed_slice;
Utility Functions
// Check if a file exists
let exists = exists.await;
Priority System
All operations require a priority parameter from the priority
crate for scheduling control:
use Priority;
// Different priority levels
let high_priority = highest_async;
let test_priority = unit_test;
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.