design-patterns

Featured

Rust design patterns for RTK. Newtype, Builder, RAII, Trait Objects, State Machine. Applied to CLI filter modules. Use when designing new modules or refactoring existing ones.

AI & Automation 53,985 stars 3309 forks Updated today Apache-2.0

Install

View on GitHub

Quality Score: 99/100

Stars 20%
100
Recency 20%
100
Frontmatter 20%
70
Documentation 15%
100
Issue Health 10%
50
License 10%
100
Description 5%
100

Skill Content

# RTK Rust Design Patterns Patterns that apply to RTK's filter module architecture. Focused on CLI tool patterns, not web/service patterns. ## Pattern 1: Newtype (Type Safety) Use when: wrapping primitive types to prevent misuse (command names, paths, token counts). ```rust // Without Newtype — easy to mix up fn track(input_tokens: usize, output_tokens: usize) { ... } track(output_tokens, input_tokens); // Silent bug! // With Newtype — compile error on swap pub struct InputTokens(pub usize); pub struct OutputTokens(pub usize); fn track(input: InputTokens, output: OutputTokens) { ... } track(OutputTokens(100), InputTokens(400)); // Compile error ✅ ``` ```rust // Practical RTK example: command name validation pub struct CommandName(String); impl CommandName { pub fn new(s: &str) -> Result<Self> { if s.contains(';') || s.contains('|') || s.contains('`') { anyhow::bail!("Invalid command name: shell metacharacters"); } Ok(Self(s.to_string())) } pub fn as_str(&self) -> &str { &self.0 } } ``` ## Pattern 2: Builder (Complex Configuration) Use when: a struct has 4+ optional fields, many with defaults. ```rust #[derive(Default)] pub struct FilterConfig { max_lines: Option<usize>, strip_ansi: bool, show_warnings: bool, truncate_at: Option<usize>, } impl FilterConfig { pub fn new() -> Self { Self::default() } pub fn max_lines(mut self, n: usize) -> Self { self.max_lines = Some(n); self } pub fn strip_...

Details

Author
rtk-ai
Repository
rtk-ai/rtk
Created
4 months ago
Last Updated
today
Language
Rust
License
Apache-2.0

Integrates with

Similar Skills

Semantically similar based on skill content — not just same category