zhanghandong/rust-skills/m05-type-driven
Claude Code and agent skill by zhanghandong/rust-skills
Trust tier 3
- community
Source check pending
Checking that the SKILL.md file is still in the repository.
CRITICAL: Use for type-driven design. Triggers: type state, PhantomData, newtype, marker trait, builder pattern, make invalid states unrepresentable, compile-time validation, sealed trait, ZST, 类型状态, 新类型模式, 类型驱动设计
Install
npx vskill@latest install zhanghandong/rust-skills/m05-type-drivenSKILL.md
Type-Driven Design
Layer 1: Language Mechanics
Core Question
How can the type system prevent invalid states?
Before reaching for runtime checks:
- Can the compiler catch this error?
- Can invalid states be unrepresentable?
- Can the type encode the invariant?
Error → Design Question
| Pattern | Don't Just Say | Ask Instead | |
|---|---|---|---|
| Primitive obsession | "It's just a string" | What does this value represent? | |
| Boolean flags | "Add an is_valid flag" | Can states be types? | |
| Optional everywhere | "Check for None" | Is absence really possible? | |
| Validation at runtime | "Return Err if invalid" | Can we validate at construction? |
Thinking Prompt
Before adding runtime validation:
- Can the type encode the constraint?
- Numeric range → bounded types or newtypes
- Valid states → type state pattern
- Semantic meaning → newtype
- When is validation possible?
- At construction → validated newtype
- At state transition → type state
- Only at runtime → Result with clear error
- Who needs to know the invariant?
- Compiler → type-level encoding
- API users → clear type signatures
- Runtime only → documentation
Trace Up ↑
When type design is unclear:
| Situation | Trace To | Question | |
|---|---|---|---|
| What types to create | m09-domain | What's the domain model? | |
| State machine design | m09-domain | What are valid transitions? | |
| Marker trait usage | m04-zero-cost | Static or dynamic dispatch? |
Trace Down ↓
From design to implementation:
Quick Reference
| Pattern | Purpose | Example | |
|---|---|---|---|
| Newtype | Type safety | struct UserId(u64); | |
| Type State | State machine | Connection<Connected> | |
| PhantomData | Variance/lifetime | PhantomData<&'a T> | |
| Marker Trait | Capability flag | trait Validated {} | |
| Builder | Gradual construction | Builder::new().name("x").build() | |
| Sealed Trait | Prevent external impl | mod private { pub trait Sealed {} } |
Pattern Examples
Newtype
Type State
Decision Guide
| Need | Pattern | |
|---|---|---|
| Type safety for primitives | Newtype | |
| Compile-time state validation | Type State | |
| Lifetime/variance markers | PhantomData | |
| Capability flags | Marker Trait | |
| Gradual construction | Builder | |
| Closed set of impls | Sealed Trait | |
| Zero-sized type marker | ZST struct |
Anti-Patterns
| Anti-Pattern | Why Bad | Better | |
|---|---|---|---|
| Boolean flags for states | Runtime errors | Type state | |
| String for semantic types | No type safety | Newtype | |
| Option for uninitialized | Unclear invariant | Builder | |
| Public fields with invariants | Invariant violation | Private + validated new() |
Related Skills
| When | See | |
|---|---|---|
| Domain modeling | m09-domain | |
| Trait design | m04-zero-cost | |
| Error handling in constructors | m06-error-handling | |
| Anti-patterns | m15-anti-pattern |
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationWarning, 75 of 100Marginal. 1 run. Evaluated 8 months ago.
Source
- SKILL.md in the repositoryCheckingskills/m05-type-driven/SKILL.md
Popularity
- Repository stars
- 924
- Repository forks
- 84
- 7-day trend score
- 34
Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 20 Mar 2026, 7 months ago.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/zhanghandong/rust-skills/m05-type-driven)