Sobre o projeto
dotcfg é uma crate Rust para gerenciamento flexível de configuração de aplicações, com controle do desenvolvedor. Ao contrário de crates que impõem uma estratégia fixa de diretório ou suportam apenas leitura, dotcfg permite que você escolha onde as configurações residem e quais formatos incluir, mantendo o binário pequeno com suporte a formatos controlado por features.
### Locais de armazenamento
Por padrão, as configurações são armazenadas em `~/.toolname/config.toml`, semelhante a `.cargo` ou `.ssh`. Os usuários podem optar por caminhos padrão XDG via `.xdg()`, armazenar em um caminho absoluto arbitrário com `.at_dir()`, ou permitir que dotcfg suba a partir do diretório de trabalho atual para localizar uma configuração local do projeto (análogo a como o Git encontra `.git`).
### Suporte a formatos
TOML está habilitado por padrão. JSON e YAML estão disponíveis como features opcionais (`json`, `yaml`), e ambos podem ser combinados para que um único binário leia múltiplos formatos. Um nome de arquivo personalizado também pode ser definido (por exemplo, `settings.json`).
### Estratégias de carregamento
- `load()` — retorna `None` quando o arquivo não existe, permitindo que a aplicação decida como proceder.
- `load_or_error()` — retorna um erro se o arquivo estiver ausente, adequado para CLIs que exigem configuração prévia.
- `load_or_default()` — cria o arquivo preenchido com valores `Default` no primeiro uso.
### Acesso por chave
Leia e escreva chaves individuais sem carregar ou sobrescrever toda a configuração:
- `cfg.get("user.name")` / `cfg.set("user.name", "jane")`
- `cfg.get_as::<u16>("port")` / `cfg.set_val("port", 8080u16)`
Chaves aninhadas usando notação por pontos (por exemplo, `section.field`) são suportadas e mapeiam naturalmente para tabelas TOML, objetos JSON e mapeamentos YAML. Arquivos ou diretórios ausentes são criados na escrita.
### Sobrescrita por variáveis de ambiente
Sobrescritas de ambiente baseadas em prefixo permitem que `MYAPP_PORT=9000` tenha precedência sobre o valor do arquivo sem modificar o estado do disco. `get` retorna a string bruta, enquanto `get_as` parseia booleanos, números e valores `Vec` separados por vírgula. Operações de escrita ainda têm como alvo apenas o arquivo de configuração.
### Integração com CLI
A biblioteca funciona junto com `clap` para implementar a cadeia padrão de precedência: flag de CLI > arquivo de configuração > fallback padrão.
### Outros utilitários
`exists()`, `dir()`, `file_path()`, `delete_file()` e `delete_dir()` estão disponíveis para inspeção e limpeza programática.
### Licença
Dupla licença sob MIT OR Apache-2.0.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.