Orientação da Base de Código
Aprenda um workspace Rust lendo os limites do Cargo.toml, rastreando o caminho main do binário e mapeando onde residem os erros, a configuração e os tipos de domínio.
Receita
# Visão geral do workspace
cat Cargo.toml
cargo tree --depth 2
rg "^\[workspace\]" -l
# Pontos de entrada
fd main.rs
rg "#\[tokio::main\]" -l
# Superfície da API pública
cargo doc --no-deps --openQuando usar isto:
- Primeiro dia em um novo repositório
- Antes de propor um refatoramento de arquitetura
- Após uma divisão significativa do workspace
Exemplo de Trabalho
Layout típico de workspace de serviço Axum:
billing/
Cargo.toml # raiz do workspace
crates/
api/ # binário: servidor HTTP
src/main.rs
src/routes/
src/state.rs
domain/ # lib: lógica de negócios, sem axum
infra/ # lib: adaptadores sqlx, reqwest
migrations/ # sqlx migrate
Ordem de leitura:
Cargo.tomlraiz, membros do workspace e dependências compartilhadasapi/src/main.rs- inicialização, rastreamento, criação de pooldomain/src/lib.rs- tipos e traits principaisinfra- como os clientes DB e HTTP implementam os traitsmigrations/- verdade do esquema
O que isto demonstra:
- Binários são finos; o domínio permanece agnóstico ao framework
- Direção da dependência:
api->domain<-infra - Migrações residem fora dos caminhos de código quente
Mergulho Profundo
Perguntas para Responder na Primeira Hora
| Pergunta | Onde procurar |
|---|---|
| Como a configuração é carregada? | config.rs, main.rs |
| Que tipo de erro cruza as fronteiras? | error.rs, domain |
| Onde estão os testes de integração? | tests/, api/tests/ |
| Portões de CI? | .github/workflows/ |
| MSRV? | rust-toolchain.toml, rust-version |
Ferramentas de Navegação
rg "struct AppState"- estado compartilhado do manipuladorcargo doc- rustdoc em itens públicosrust-analyzergoto-def entre crates
Armadilhas
- Começar no crate errado - falta de contexto do workspace. Correção: sempre
Cargo.tomlraiz primeiro. - Ignorar flags de feature - código "faltando" no IDE. Correção: verifique
Cargo.toml[features]. - Assumir binário único - o workspace tem muitos. Correção:
cargo metadata | jq '.packages[].targets'. - Docs apenas no README - obsoleto. Correção: confie em
cargo doce ADRs dearchitecture/. - Pular migrações - modelo mental incorreto das entidades. Correção: leia o esquema SQL precocemente.
Alternativas
| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| Índice ADR de Arquitetura | Sistema documentado | Caos Greenfield |
| Vídeo de Onboarding | Legado grande | Repositório tem bons docs |
| Tour de emparelhamento | Domínio complexo | Orientação individual com tempo limitado |
FAQs
Monorepo vs multirepo?
O Cargo.toml do workspace sinaliza monorepo; clone uma vez, construa com --workspace.
Código gerado?
Verifique build.rs, OUT_DIR e artefatos sqlx prepare - não edite manualmente.
Relacionados
- Padrões de estrutura de projeto
- Workspaces
- Checklist de Onboarding de Desenvolvedores
- Pesquisa e regex
Versões de Stack: Esta página foi escrita para Rust 1.97.0 (edição 2024), Tokio 1.x, Axum 0.8, serde 1.0, sqlx 0.8, clap 4 e Polars 0.46+.