use-crate
use crate | Rust
- use crate | Rust
O que é use crate no Rust
O que significa
No Rust, crate é uma palavra reservada que representa o seu projeto atual (o pacote que está sendo compilado).
Então:
use crate::alguma_coisa;
significa:
✅ “importa alguma_coisa de dentro do meu próprio projeto”
Para que serve o use
O use serve para trazer um caminho (path) para o escopo atual, permitindo usar nomes sem escrever o caminho completo toda hora.
Exemplo sem use:
crate::utils::formatar_nome();
Com use:
use crate::utils::formatar_nome;
formatar_nome();
Exemplo comum com módulos
Estrutura típica:
src/
├─ main.rs
└─ utils.rs
utils.rs:
pub fn somar(a: i32, b: i32) -> i32 {
a + b
}
main.rs:
mod utils;
use crate::utils::somar;
fn main() {
println!("{}", somar(2, 3));
}
crate:: vs super:: vs self::
crate::→ começa da raiz do projetosuper::→ sobe um nível no módulo (pai)self::→ se refere ao módulo atual
Exemplo rápido:
use crate::modulo_raiz::Algo;
use super::AlgoDoPai;
use self::AlgoLocal;
Quando você vai ver use crate::...
Você vai ver bastante quando:
- o código está dividido em vários módulos (
mod) - você quer organizar imports de forma limpa
- quer evitar repetir caminhos longos
O que é pub(crate) e para que serve
Visibilidade em Rust
Por padrão, tudo em Rust é privado.
Você precisa usar pub para tornar algo visível fora do módulo.
Rust permite granularidade fina de visibilidade, e pub(crate) é uma dessas opções.
O que significa pub(crate)
pub(crate) fn minha_funcao() {}
significa:
✅ “essa função é pública dentro do crate, mas não fora dele”
Ou seja:
- acessível por qualquer módulo do projeto
- não acessível por outros crates (bibliotecas externas)
Comparação de visibilidade
| Modificador | Visibilidade |
|---|---|
(sem pub) | apenas no módulo atual |
pub | público para qualquer crate |
pub(crate) | público apenas dentro do projeto |
pub(super) | visível apenas para o módulo pai |
Exemplo prático
mod utils {
pub(crate) fn interno() {
println!("visível no crate");
}
}
fn main() {
crate::utils::interno(); // funciona
}
Se outro crate tentar usar:
use meu_crate::utils::interno;
❌ Isso NÃO compila — porque não é público externamente.
Quando usar pub(crate)
Use quando você quer:
- expor funções entre módulos internos
- evitar “vazar” APIs internas para usuários externos
- manter encapsulamento no nível do crate
Isso é muito comum em bibliotecas bem estruturadas.
Relação com módulos e organização
Rust incentiva fortemente o uso de módulos e controle de visibilidade para:
- garantir encapsulamento
- evitar acoplamento desnecessário
- deixar a API pública mais limpa
Esse padrão é reforçado pela própria organização de crates e módulos