๐ŸŽฏ

m05-type-driven

๐ŸŽฏSkill

from actionbook/rust-skills

VibeIndex|
What it does

Enforces compile-time type safety by preventing invalid states through type-level design techniques like newtypes, type states, and phantom types.

๐Ÿ“ฆ

Part of

actionbook/rust-skills(35 items)

m05-type-driven

Installation

Quick InstallInstall with npx
npx skills add ZhangHanDong/rust-skills
CargoRun with Cargo (Rust)
cargo install cowork
git cloneClone repository
git clone https://github.com/ZhangHanDong/rust-skills.git
Add MarketplaceAdd marketplace to Claude Code
/plugin marketplace add ZhangHanDong/rust-skills
๐Ÿ“– Extracted from docs: actionbook/rust-skills
16Installs
665
-
AddedFeb 4, 2026

Skill Details

SKILL.md

"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, ็ฑปๅž‹็Šถๆ€, ๆ–ฐ็ฑปๅž‹ๆจกๅผ, ็ฑปๅž‹้ฉฑๅŠจ่ฎพ่ฎก"

Overview

# 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:

  1. Can the type encode the constraint?

- Numeric range โ†’ bounded types or newtypes

- Valid states โ†’ type state pattern

- Semantic meaning โ†’ newtype

  1. When is validation possible?

- At construction โ†’ validated newtype

- At state transition โ†’ type state

- Only at runtime โ†’ Result with clear error

  1. 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:

```

"Need to validate email format"

โ†‘ Ask: Is this a domain value object?

โ†‘ Check: m09-domain (Email as Value Object)

โ†‘ Check: domain-* (validation requirements)

```

| 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:

```

"Need type-safe wrapper for primitives"

โ†“ Newtype: struct UserId(u64);

"Need compile-time state validation"

โ†“ Type State: Connection

"Need to track phantom type parameters"

โ†“ PhantomData: PhantomData

"Need capability markers"

โ†“ Marker Trait: trait Validated {}

"Need gradual construction"

โ†“ Builder: Builder::new().field(x).build()

```

---

Quick Reference

| Pattern | Purpose | Example |

|---------|---------|---------|

| Newtype | Type safety | struct UserId(u64); |

| Type State | State machine | Connection |

| 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

```rust

struct Email(String); // Not just any string

impl Email {

pub fn new(s: &str) -> Result {

// Validate once, trust forever

validate_email(s)?;

Ok(Self(s.to_string()))

}

}

```

Type State

```rust

struct Connection(TcpStream, PhantomData);

struct Disconnected;

struct Connected;

struct Authenticated;

impl Connection {

fn connect(self) -> Connection { ... }

}

impl Connection {

fn authenticate(self) -> Connection { ... }

}

```

---

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 |

More from this repository10

๐Ÿช
actionbook-rust-skills๐ŸชMarketplace

Comprehensive Rust development assistant with meta-question routing, coding guidelines, version queries, and ecosystem support

๐ŸŽฏ
coding-guidelines๐ŸŽฏSkill

Provides comprehensive Rust coding guidelines covering naming conventions, best practices, error handling, memory management, concurrency, and code style recommendations.

๐ŸŽฏ
m09-domain๐ŸŽฏSkill

Guides domain modeling in Rust by helping identify entities, value objects, aggregates, and their ownership patterns with domain-driven design principles.

๐ŸŽฏ
rust-refactor-helper๐ŸŽฏSkill

Performs safe Rust refactoring by analyzing symbol references, dependencies, and potential impacts using Language Server Protocol (LSP) operations.

๐ŸŽฏ
m02-resource๐ŸŽฏSkill

Guides developers in selecting the right smart pointer and resource management strategy based on ownership, thread safety, and design constraints.

๐ŸŽฏ
rust-learner๐ŸŽฏSkill

Retrieves and provides comprehensive Rust and crate information, including versions, features, documentation, and changelogs from authoritative sources.

๐ŸŽฏ
m11-ecosystem๐ŸŽฏSkill

Guides Rust developers in selecting, integrating, and managing ecosystem dependencies with best practices and strategic decision-making.

๐ŸŽฏ
rust-trait-explorer๐ŸŽฏSkill

Explores Rust trait implementations, revealing which types implement specific traits and their implementation details using LSP.

๐ŸŽฏ
rust-call-graph๐ŸŽฏSkill

Generates and visualizes Rust function call graphs using LSP, revealing function relationships and call hierarchies.

๐ŸŽฏ
m12-lifecycle๐ŸŽฏSkill

Guides resource lifecycle design by analyzing creation, usage, cleanup strategies, and ownership patterns for efficient and safe resource management in Rust.