← Back to list
The

async-drop
by cryfs
Cryptographic filesystem for the cloud
⭐ 2,201🍴 169📅 Jan 22, 2026
Use Cases
📜
Smart Contract Development
Streamline smart contract creation and deployment.
👛
Wallet Integration
Implement integration with crypto wallets.
🔎
Transaction Analysis
Analyze and track blockchain transactions.
SKILL.md
name: async-drop description: Guide to the AsyncDrop pattern for async cleanup in Rust. Use when working with AsyncDropGuard, implementing AsyncDrop trait, or handling async resource cleanup.
AsyncDrop Pattern Guide
The AsyncDrop pattern enables async cleanup for types that hold resources requiring asynchronous teardown (network connections, file handles, background tasks, etc.).
Core Concept
Rust's Drop trait is synchronous, but sometimes cleanup needs to be async. The AsyncDrop pattern solves this by:
- Wrapping values in
AsyncDropGuard<T> - Requiring explicit
async_drop().awaitcalls - Panicking if cleanup is forgotten
Quick Reference
// Creating
let mut guard = AsyncDropGuard::new(my_value);
// Using (transparent via Deref)
guard.do_something();
// Cleanup (REQUIRED before dropping)
guard.async_drop().await?;
The AsyncDrop Trait
#[async_trait]
pub trait AsyncDrop {
type Error: Debug;
async fn async_drop_impl(&mut self) -> Result<(), Self::Error>;
}
Essential Rules
| Rule | Description |
|---|---|
| Always call async_drop() | Every AsyncDropGuard must have async_drop() called |
| Factory methods return guards | fn new() -> AsyncDropGuard<Self>, never plain Self |
| Types with guard members impl AsyncDrop | Delegate to member async_drops |
| Use the macro when possible | with_async_drop_2! handles cleanup automatically |
| Panics are exceptions | It's OK to skip async_drop on panic paths |
The with_async_drop_2! Macro
Automatically calls async_drop() on scope exit:
let resource = get_resource().await?;
with_async_drop_2!(resource, {
// Use resource here
resource.do_work().await?;
Ok(result)
})
Additional References
- patterns.md - Implementation patterns and examples
- gotchas.md - Common mistakes and how to avoid them
- helpers.md - Helper types (AsyncDropArc, AsyncDropHashMap, etc.)
Location
Implementation: crates/utils/src/async_drop/
Score
Total Score
80/100
Based on repository quality metrics
✓SKILL.md
SKILL.mdファイルが含まれている
+20
✓LICENSE
ライセンスが設定されている
+10
○説明文
100文字以上の説明がある
0/10
✓人気
GitHub Stars 1000以上
+15
✓最近の活動
1ヶ月以内に更新
+10
✓フォーク
10回以上フォークされている
+5
○Issue管理
オープンIssueが50未満
0/5
✓言語
プログラミング言語が設定されている
+5
✓タグ
1つ以上のタグが設定されている
+5
Reviews
💬
Reviews coming soon
