You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: config.rs
    path of file: ./repos/cargo-changelog/src
    
    the code of the file until where you have to start completion: use std::collections::HashMap;
use std::path::Path;
use std::path::PathBuf;

use miette::IntoDiagnostic;

use crate::error::Error;
use crate::fragment::FragmentDataDesc;

pub const CONFIG_FILE_NAMES: &[&str] = &[".changelog.toml", "changelog.toml"];
pub const CONFIG_FILE_DEFAULT_NAME: &str = CONFIG_FILE_NAMES[1];
pub const DEFAULT_CONFIG: &str = include_str!("../assets/default_config.toml");

#[derive(Debug, getset::Getters, getset::CopyGetters, serde::Deserialize, serde::Serialize)]
pub struct Configuration {
    add_version_date: bool,

    /// Director
    
pub fn load(repo_workdir_path: &Path) -> miette::Result<Configuration> {
    let mut changelog_config_path = None;
    for config_path in CONFIG_FILE_NAMES {
        let check_path = {
            let mut cfg_path = repo_workdir_path.to_path_buf();
            cfg_path.push(config_path);
            cfg_path
        };

        if check_path.exists() {
            changelog_config_path = Some(check_path);
            break;
        }
    }

    let Some(changelog_config_path) = changelog_config_path else {
        miette::bail!(Error::ConfigDoesNotExist)
    };

    let config = std::fs::read_to_string(changelog_config_path)
        .map_err(Error::from)
        .into_diagnostic()?;

    toml::from_str(&config)
        .map_err(Error::from)
        .into_diagnostic()
}