# Calvery SDK — Rust
Official Rust SDK for [Calvery Vault](https://calvery.xyz) secret manager.
## Install
Add to `Cargo.toml`:
```toml
[dependencies]
calvery = "0.1"
tokio = { version = "1", features = ["rt-multi-thread", "macros"] }
```
## Quickstart
```rust
use calvery::Client;
#[tokio::main]
async fn main() -> Result<(), calvery::Error> {
let client = Client::new(
std::env::var("CVSM_TOKEN").unwrap(),
"acme-corp",
)?;
// Get single secret
let db_url = client.get("DATABASE_URL").await?;
println!("DB URL: {}", db_url);
// Get all secrets as HashMap
let all = client.get_all().await?;
// Inject into process env (skip ones already set)
let injected = client.inject(false).await?;
println!("Injected {} vars", injected.len());
Ok(())
}
```
## Config
```rust
use std::time::Duration;
use calvery::Client;
let client = Client::builder("cvsm_xxx", "acme-corp")
.base_url("https://vault.your-company.internal") // self-host
.environment("staging")
.cache_ttl(Duration::from_secs(60))
.max_retries(5)
.timeout(Duration::from_secs(30))
.build()?;
```
## Error handling
```rust
match client.get("DATABASE_URL").await {
Ok(v) => println!("{}", v),
Err(calvery::Error::NotFound(msg)) => eprintln!("secret missing: {msg}"),
Err(calvery::Error::Auth(msg)) => eprintln!("token invalid: {msg}"),
Err(calvery::Error::Network(msg)) => eprintln!("network: {msg}"),
Err(e) => eprintln!("other: {e}"),
}
```
## License
MIT — see [LICENSE](https://github.com/RenzyArmstrong/Calvery-Vault/blob/master/LICENSE).
Bug reports: [github.com/RenzyArmstrong/Calvery-Vault/issues](https://github.com/RenzyArmstrong/Calvery-Vault/issues)
Support: support@calvery.xyz