Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
daoxide
Caution: This repo was created using vibe coding
High-performance Rust library for accessing DAOS (Distributed Asynchronous Object Storage).
This crate provides a safe wrapper around daos-rs bindings, with an ergonomic Rust-style API.
Overview
daoxide wraps the low-level DAOS C APIs into safe Rust interfaces:
- RAII handle management: Pool, Container, and Object handles are automatically released on
Drop - Type safety: strongly typed keys, object IDs, and flags to prevent runtime errors
- Builder pattern: fluent chained calls instead of complex initialization code
- Transaction support: marker-based
Txtypes ensure correct transaction handling - Unified error handling:
DaosErrorenum instead of raw integer error codes
Feature Flags
| Feature | Enabled by Default | Description |
|---|---|---|
tracing |
Yes | Tracing observability support |
serde |
Yes | Serialization/deserialization support |
async |
No | Async runtime support (Tokio) |
mock |
No | Mock testing utilities |
[]
= { = "0.1", = ["async"] }
Quick Start
High-Level API (Facade)
Use DaosClient::builder() to connect to DAOS quickly:
use *;
Mid-Level API (Pool/Container/Object)
Use PoolBuilder and Container APIs directly:
use ;
use ;
Low-Level API (Object I/O)
Use DKey/AKey/IoBuffer for key-value operations:
use ;
use *;
let object = client.object_builder
.open?;
let dkey = new?;
let akey = new?;
let value = from_vec;
let iod = Single;
let sgl = builder.push.build?;
object.update?;
Examples
| Example | File | Description |
|---|---|---|
| Minimal client | examples/minimal_client.rs |
Facade API demo |
| Object operations | examples/object_io.rs |
Object read/write and key-value operations |
| Pool/container management | examples/pool_container.rs |
Pool/Container lifecycle |
Run examples:
Documentation
| Document | Contents |
|---|---|
| docs/MIGRATION.md | Complete guide for migrating from daos-rs to daoxide |
| RELEASE.md | Release strategy, versioning, and quality gates |
Quality Check Commands
# Code formatting check
# Clippy check
# Tests (must use --test-threads=1)
# Documentation build
# MSRV verification
Feature Matrix Validation
# No default features
# Check each feature independently
# All features
Known Limitations
1. OIT (Object Instance Tracking) is unavailable
daos_oit_* FFI functions are not exported by daos-rs, so crate::oit remains a stub.
Workaround: use object enumeration in the crate::iter module.
2. Async event queue is limited
daos_progress is not exposed in daos-rs. The async feature currently provides a spawn_blocking wrapper rather than native async progress.
3. Parallel testing caveat
test_runtime_init_and_fini may fail under parallel test execution because DAOS uses global state (RUNTIME_REFCOUNT).
Solution: run tests with --test-threads=1.
This is a pre-existing test infrastructure issue and does not affect library correctness.
Public Module Architecture
daoxide
├── error - Error types
├── facade - High-level API (DaosClient)
├── runtime - Runtime management
├── pool - Pool operations
├── container - Container operations
├── object - Object operations
├── tx - Transaction management
├── io - I/O operations (DKey/AKey/IoBuffer)
├── query - Query operations
├── iter - Iterator utilities
├── oit - Object instance tracking (currently unavailable)
└── prelude - Common exports
MSRV (Minimum Supported Rust Version)
- MSRV: Rust 1.85
- Edition: 2024
License
GPL-3.0-only