Rust

Newtype Pattern (zero-cost wrappers)

admin by @admin ADMIN
1h ago
May 31, 2026
Public
0 0 up · 0 down Sign in to vote
Wrap a primitive in a tuple struct to give it a distinct type identity at the type level — without runtime cost. Replaces "is this number a UserId or a PostId?" bugs.
Rust
Raw
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
struct UserId(u64);

#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
struct PostId(u64);

fn delete_user(id: UserId) {
    println!("deleting user {}", id.0);
}

fn main() {
    let u = UserId(42);
    let p = PostId(99);

    delete_user(u);        // ✓
    // delete_user(p);     // ❌ mismatched types: expected UserId
    // delete_user(42);    // ❌ expected UserId, got integer
}
Tags

Save your own code snippets

Create a free account and build your private vault. Share publicly whenever you want.