forked from
smokesignal.events/quickdid
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.
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};