async-graphql-dataloader 0.1.0

A high-performance DataLoader implementation for async-graphql with batching and caching
Documentation

async-graphql-dataloader

🚀 High-performance DataLoader implementation for async-graphql in Rust

Crates.io License: MIT/Apache-2.0 Rust

🎯 About the Project

Created and developed by: Cleiton Augusto Correa Bezerra

This project solves one of the most common problems in GraphQL applications: the N+1 problem.

Why use this DataLoader?

  • 🚀 Performance: Intelligent batch loading and caching
  • 🦀 Safety: Rust's memory safety guarantees
  • ⚡ Concurrency: Native async/await with Tokio
  • 🔧 Flexible: Easy integration with any data source

📦 Installation

Add this to your Cargo.toml: [dependencies] async-graphql-dataloader = "0.1.0"

For async-graphql integration: [dependencies] async-graphql-dataloader = { version = "0.1.0", features = ["graphql"] }

🚀 Quick Start use async_graphql_dataloader::{DataLoader, Loader}; use std::collections::HashMap;

struct UserLoader;

#[async_trait::async_trait] impl Loader for UserLoader { type Value = String; type Error = std::convert::Infallible;

async fn load(&self, keys: &[i32]) -> Result<HashMap<i32, Self::Value>, Self::Error> {
    let mut users = HashMap::new();
    for &key in keys {
        users.insert(key, format!("User {}", key));
    }
    Ok(users)
}

}

#[tokio::main] async fn main() { let loader = DataLoader::new(UserLoader);

// Automatic batching - these will be batched into one call
let user1 = loader.load(1).await;
let user2 = loader.load(2).await;

println!("User 1: {:?}", user1);
println!("User 2: {:?}", user2);

} 📚 Features ✅ Automatic Batching: Multiple requests combined into single batches

✅ Intelligent Caching: Request-level caching with DashMap

✅ Async Ready: Built on Tokio async runtime

✅ Type Safe: Full Rust type safety

✅ Error Handling: Configurable error handling

✅ async-graphql Integration: Seamless integration with async-graphql

🔧 Advanced Usage See the examples directory for more advanced usage patterns:

Basic Usage

Axum + GraphQL Integration

📖 Documentation Full API documentation is available on docs.rs

🤝 Contributing Contributions are welcome! Please feel free to submit pull requests or open issues.

📄 License This project is licensed under the MIT License - see the LICENSE file for details.

Made with ❤️ and Rust