toml-migrate 0.1.0

Automatically migrate versioned config files to the latest version
Documentation
use serde::Deserialize;
use toml_migrate::{build_migration_chain, ConfigMigrator};

#[derive(Debug, Deserialize)]
struct ConfigV1 {
    name: String,
    timeout: u32,
}

#[derive(Debug, Deserialize)]
struct ConfigV2 {
    name: String,
    timeout: u32,
    retries: u8,
}

impl From<ConfigV1> for ConfigV2 {
    fn from(prev: ConfigV1) -> Self {
        Self {
            name: prev.name,
            timeout: prev.timeout,
            retries: 4,
        }
    }
}

build_migration_chain!(ConfigV1 = 1, ConfigV2 = 2);

fn main() {
    let config_str = r#"
        version = 1
        name = "MyApp"
        timeout = 60
    "#;

    let migrator = ConfigMigrator::new("version");

    let (config, migrated) = migrator
        .migrate_config::<ConfigV2>(config_str)
        .expect("failed to read and/or migrate config");

    if migrated {
        println!("Migration occured! New config: {:?}", config);
    }
}