Biblioteca uuid para Rust: guia completo para gerar e trabalhar com UUID
1. O que é uuid e por que você precisa dela?
A biblioteca uuid para Rust é uma das crates mais populares e estáveis para gerar, fazer parsing e trabalhar com identificadores únicos universais (UUID) de acordo com o padrão RFC 4122. UUID (Universally Unique Identifier) é um número de 128 bits que é garantidamente único no espaço e no tempo, tornando-o ideal para uso como chaves primárias em bancos de dados, identificadores de sessão, rastreadores de eventos e qualquer outro cenário que exija unicidade sem gerenciamento centralizado.
Por que você precisa dessa biblioteca? No desenvolvimento moderno com Rust, surge frequentemente a necessidade de gerar identificadores únicos que não dependam da ordem de criação dos objetos, não revelem informações sobre a quantidade de registros (ao contrário de IDs autoincrementais) e possam ser transmitidos com segurança entre diferentes sistemas. A crate uuid fornece um conjunto completo de ferramentas para trabalhar com UUID das versões 1, 3, 4, 5 e 7 (a última é uma versão temporal, adicionada em atualizações recentes). Ela suporta serialização via serde, trabalho com diferentes formatos de representação (canônico, sem hífens, URN) e integração com bancos de dados populares através de recursos correspondentes.
A biblioteca é ativamente mantida pela comunidade, possui documentação excelente e é usada em milhares de projetos. Ela é escrita em Rust puro, sem dependências externas (exceto recursos opcionais), o que garante segurança de memória e alta performance. Se você está escrevendo um servidor web, um sistema distribuído, uma ferramenta de linha de comando ou qualquer outra aplicação em Rust que precise de identificadores únicos — o uuid será seu aliado indispensável.
2. Instalação
Para adicionar a biblioteca uuid ao seu projeto Rust, execute um dos seguintes comandos no diretório raiz do projeto:
cargo add uuid
Ou adicione manualmente a dependência no arquivo Cargo.toml:
[dependencies]
uuid = { version = "1.10", features = ["v4", "v7", "serde"] }
Observe a seção features. Por padrão, a biblioteca inclui apenas funcionalidades básicas. Para trabalhar com versões específicas de UUID, é necessário indicar explicitamente os recursos correspondentes:
v1— UUID versão 1 (baseado em tempo e endereço MAC)v3— UUID versão 3 (baseado em hash MD5 de nome e namespace)v4— UUID versão 4 (aleatório)v5— UUID versão 5 (baseado em hash SHA-1 de nome e namespace)v7— UUID versão 7 (temporal com precisão de milissegundos, RFC 9562)serde— suporte a serialização/desserialização via crate serdefast-rng— uso de gerador de números aleatórios rápido (recomendado para v4)
Se você precisar de todas as funcionalidades, pode especificar:
[dependencies]
uuid = { version = "1.10", features = ["v1", "v3", "v4", "v5", "v7", "serde"] }
3. Início rápido — exemplo mínimo funcional
Crie um novo projeto com o comando cargo new uuid_exemplo, adicione a dependência no Cargo.toml conforme indicado acima, e substitua o conteúdo do arquivo src/main.rs pelo seguinte código:
use uuid::Uuid;
fn main() {
// Gera um UUID aleatório versão 4
let meu_uuid = Uuid::new_v4();
println!("UUID v4 gerado: {}", meu_uuid);
// Faz parsing de um UUID a partir de uma string
let parsed = Uuid::parse_str("550e8400-e29b-41d4-a716-446655440000")
.expect("Não foi possível fazer o parsing do UUID");
println!("UUID parseado: {}", parsed);
// Comparação entre UUIDs
let outro_uuid = Uuid::new_v4();
if meu_uuid == outro_uuid {
println!("Os UUIDs são iguais (improvável!)");
} else {
println!("Os UUIDs são diferentes (como esperado)");
}
}
Execute o projeto com cargo run. Você verá algo como:
UUID v4 gerado: f47ac10b-58cc-4372-a567-0e02b2c3d479
UUID parseado: 550e8400-e29b-41d4-a716-446655440000
Os UUIDs são diferentes (como esperado)
Também na biblioteca
Parsing de HTML em C++: bibliotecas e exemplos para trabalhar com DOM e XPath
Biblioteca kotlinx.serialization para processamento JSON em Kotlin
Gerador de QR Code em C++ com libqrencode e CQRcode
Biblioteca WebSocket Kotlin: ktor-client-websockets para tempo real