Habilidades Type-Driven Design
📦

Type-Driven Design

Seguro

使用类型设计更安全的 Rust API

手动验证和运行时检查容易出错且代价高昂。本技能教授 Rust 中的类型驱动设计模式,将正确性保证从运行时转移到编译时,在代码运行前消除整类错误。

Suporta: Claude Codex Code(CC)
⚠️ 67 Ruim
1

Baixar o ZIP da skill

2

Upload no Claude

Vá em Configurações → Capacidades → Skills → Upload skill

3

Ative e comece a usar

Testar

A utilizar "Type-Driven Design". 如何防止在货币转移函数中意外交换 from_account 和 to_account?

Resultado esperado:

使用 newtype 模式:

```rust
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct AccountId(String);

#[derive(Debug, Clone, Copy)]
pub struct Amount(f64);

fn transfer_money(from: AccountId, to: AccountId, amount: Amount) {
// 编译器防止混淆 from 和 to!
}

// 这不会编译:
// transfer_money(to, from, amount); // 类型错误!
```

A utilizar "Type-Driven Design". 如何确保 API 用户在构建之前必须调用 set_host() 和 set_port()?

Resultado esperado:

使用带状态标记的构建器:

```rust
pub struct NoHost;
pub struct HasHost;
pub struct NoPort;
pub struct HasPort;

pub struct ConfigBuilder<HostState, PortState> { /* ... */ }

impl ConfigBuilder<HasHost, HasPort> {
pub fn build(self) -> Config {
// 不需要 Result - 所有必需字段都已保证!
Config { host: self.host.unwrap(), port: self.port.unwrap() }
}
}

// 不会编译:
// ConfigBuilder::new().build(); // 缺少 host 和 port!
```

Auditoria de Segurança

Seguro
v1 • 1/23/2026

All static findings are false positives. The scanner incorrectly flagged 'type-driven design' references as cryptographic algorithms, markdown backticks as shell command execution, and documentation URLs as network security risks. This is pure educational documentation about Rust patterns with no actual security concerns.

1
Arquivos analisados
798
Linhas analisadas
0
achados
1
Total de auditorias
Nenhum problema de segurança encontrado
Auditado por: claude

Pontuação de qualidade

38
Arquitetura
100
Manutenibilidade
87
Conteúdo
31
Comunidade
100
Segurança
57
Conformidade com especificações

O Que Você Pode Construir

构建安全的金融系统

创建类型安全的金融 API,其中 AccountId 和 Amount 类型不会意外被交换,从而防止货币转移逻辑中的代价高昂的错误。

建模协议状态机

设计网络协议或数据库会话,其中连接状态(如 Disconnected、Connected 和 Authenticated)由类型系统强制执行。

在编译时验证 API 输入

构建在构建前必须设置所有必需字段的构建器,消除运行时验证并提供更好的错误消息。

Tente Estes Prompts

Newtype 模式介绍
向我展示如何在 Rust 中使用 newtype 模式来防止在我的 API 中混淆 UserId 和 OrderId。包括问题(普通类型)和解决方案(newtypes)。
用于连接的状态模式
帮助我实现一个连接类型,该类型强制在调用 authenticate() 之前调用 connect(),在调用 send_data() 之前调用 authenticate()。使用状态模式在编译时使无效的状态转换成为不可能。
编译时验证的构建器
在 Rust 中创建一个 ConfigBuilder,其中 host 和 port 是必需字段,必须在调用 build() 之前设置。构建器应直接返回 Config(而不是 Result),因为有效性在编译时已得到保证。
用于类型级约束的幻类型
向我展示如何使用幻类型创建类型安全的 ID 系统,其中 UserId 和 OrderId 是不兼容的类型,并且外键(如 Order.user_id)必须匹配正确的 ID 类型。

Melhores Práticas

  • 在类型中编码域不变量而不是运行时检查,以在编译时捕获错误
  • 对状态使用标记类型以强制执行有效转换并使非法状态无法表示
  • 利用 Rust 的零成本抽象 - 类型级约束不添加任何运行时开销

Evitar

  • 使用布尔标志(如 is_connected)而不是防止无效操作的状态类型
  • 推迟到运行时验证,而类型可以在编译时强制执行正确性
  • 在公共 API 中暴露原始原始类型,而域类型可以提供更好的安全性

Perguntas Frequentes

Rust 中的状态模式是什么?
状态模式是一种类型携带其当前状态的编译时信息的模式。方法仅对特定状态可用,防止无效操作(如在 authenticate() 之前调用 send_data())。
newtype 模式如何提高安全性?
newtype 模式将原始类型包装在结构体中,创建一个不同的类型。这可以防止意外地在需要 OrderId 的地方传递 AccountId,因为编译器将它们视为不兼容的类型。
类型驱动的模式会增加运行时开销吗?
不会。Rust 中所有类型驱动的设计模式都编译为零成本抽象。Newtypes 与其内部类型具有相同的大小,而幻类型则被完全优化掉。
何时应该避免类型驱动的设计?
当状态高度动态、转换依赖于运行时数据、编译时间变得过高,或 API 复杂性超过安全优势时,应考虑替代方案。
运行时验证和编译时验证有什么区别?
运行时验证在执行时返回错误(Result 或 panic)。编译时验证使无效状态无法表示,因此错误在编译期间出现,并带有更好的错误消息。
类型驱动的设计可以与异步代码配合使用吗?
可以。状态类型与异步完美配合。本技能中展示的构建器模式包括异步 send() 方法,这些方法仅在请求正确构建时才可用。

Detalhes do Desenvolvedor

Estrutura de arquivos

📄 SKILL.md