QuickDID is a high-performance AT Protocol identity resolution service written in Rust. It provides handle-to-DID resolution with Redis-backed caching and queue processing.
at main 70 lines 2.5 kB view raw
1//! Handle resolution module for AT Protocol identity resolution. 2//! 3//! This module provides various implementations of handle-to-DID resolution 4//! with different caching strategies. 5//! 6//! # Architecture 7//! 8//! The module is structured around the [`HandleResolver`] trait with multiple 9//! implementations: 10//! 11//! - [`BaseHandleResolver`]: Core resolver that performs actual DNS/HTTP lookups 12//! - [`RateLimitedHandleResolver`]: Rate limiting wrapper using semaphore-based concurrency control 13//! - [`CachingHandleResolver`]: In-memory caching wrapper with configurable TTL 14//! - [`RedisHandleResolver`]: Redis-backed persistent caching with binary serialization 15//! - [`SqliteHandleResolver`]: SQLite-backed persistent caching for single-instance deployments 16//! 17//! # Example Usage 18//! 19//! ```no_run 20//! use std::sync::Arc; 21//! use quickdid::handle_resolver::{create_base_resolver, create_caching_resolver, HandleResolver}; 22//! use quickdid::metrics::NoOpMetricsPublisher; 23//! 24//! # async fn example() -> Result<(), Box<dyn std::error::Error>> { 25//! # use atproto_identity::resolve::HickoryDnsResolver; 26//! # use reqwest::Client; 27//! # let dns_resolver = Arc::new(HickoryDnsResolver::create_resolver(&[])); 28//! # let http_client = Client::new(); 29//! # let metrics = Arc::new(NoOpMetricsPublisher); 30//! // Create base resolver using factory function 31//! let base = create_base_resolver( 32//! dns_resolver, 33//! http_client, 34//! metrics.clone(), 35//! ); 36//! 37//! // Wrap with in-memory caching 38//! let resolver = create_caching_resolver(base, 300, metrics); 39//! 40//! // Resolve a handle 41//! let did = resolver.resolve("alice.bsky.social").await?; 42//! # Ok(()) 43//! # } 44//! ``` 45 46// Module structure 47mod base; 48mod errors; 49mod memory; 50mod proactive_refresh; 51mod rate_limited; 52mod redis; 53mod sqlite; 54mod traits; 55 56// Re-export public API 57pub use errors::HandleResolverError; 58pub use traits::HandleResolver; 59 60// Factory functions for creating resolvers 61pub use base::create_base_resolver; 62pub use memory::create_caching_resolver; 63pub use proactive_refresh::{ 64 ProactiveRefreshResolver, create_proactive_refresh_resolver, 65 create_proactive_refresh_resolver_dyn, create_proactive_refresh_resolver_with_metrics, 66 create_proactive_refresh_resolver_with_threshold, 67}; 68pub use rate_limited::{create_rate_limited_resolver, create_rate_limited_resolver_with_timeout}; 69pub use redis::{create_redis_resolver, create_redis_resolver_with_ttl}; 70pub use sqlite::{create_sqlite_resolver, create_sqlite_resolver_with_ttl};