Manage JSON configuration files in Rust projects using the cnctd_config library. Handles type-safe serialization/deserialization with automatic file persistence for any Serialize/DeserializeOwned type.
Implement type-safe JSON configuration file management in Rust projects using the `cnctd_config` library.
This skill helps you integrate and use the `cnctd_config` library to manage application configurations stored as JSON files. The library provides automatic serialization/deserialization for any type implementing `Serialize` and `DeserializeOwned` traits.
First, verify or add the dependency to `Cargo.toml`:
```toml
[dependencies]
cnctd_config = "0.1.2"
serde = { version = "1.0", features = ["derive"] }
```
Create a struct representing your configuration data:
```rust
use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize)]
struct AppSettings {
theme: String,
port: u16,
debug_mode: bool,
// Add any fields needed for your application
}
```
**Requirements:**
Initialize a new configuration with default values:
```rust
use cnctd_config::Config;
let settings = AppSettings {
theme: "dark".to_string(),
port: 8080,
debug_mode: false,
};
let config = Config::new(settings, "config/settings.json");
config.save()?; // Persists to disk
```
Load configuration from a JSON file:
```rust
let config = Config::<AppSettings>::load("config/settings.json")?;
let current_theme = &config.get().theme;
```
Modify and save updated configuration:
```rust
let mut config = Config::<AppSettings>::load("config/settings.json")?;
let new_settings = AppSettings {
theme: "light".to_string(),
port: config.get().port, // Keep existing value
debug_mode: true,
};
config.update(new_settings)?; // Automatically saves to disk
```
Read configuration values without modification:
```rust
let config = Config::<AppSettings>::load("config/settings.json")?;
let settings = config.get();
println!("Theme: {}", settings.theme);
println!("Port: {}", settings.port);
```
```rust
#[derive(Serialize, Deserialize)]
struct DatabaseConfig {
host: String,
port: u16,
}
#[derive(Serialize, Deserialize)]
struct AppConfig {
app_name: String,
database: DatabaseConfig,
}
```
```rust
#[derive(Serialize, Deserialize)]
struct AppSettings {
#[serde(default)]
optional_feature: Option<String>,
}
```
```rust
let app_config = Config::<AppSettings>::load("config/app.json")?;
let db_config = Config::<DatabaseConfig>::load("config/database.json")?;
```
All operations that interact with the filesystem return `Result<T>`:
```rust
match Config::<AppSettings>::load("settings.json") {
Ok(config) => {
// Use config
},
Err(e) => {
eprintln!("Failed to load config: {}", e);
// Handle error or use defaults
}
}
```
Leave a review
No reviews yet. Be the first to review this skill!
# Download SKILL.md from killerskills.ai/api/skills/rust-json-config-manager/raw