csv_utility 0.1.1

CLI to map csv files and some other utilities.
use std::fmt;
use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize)]
pub struct Mappings {
    pub mappings: Vec<Map>
}

#[derive(Serialize, Deserialize)]
pub struct Map {
    pub dest_entry: HeaderEntry,
    pub source_entry: Option<HeaderEntry>,
}

#[derive(Serialize, Deserialize)]
pub struct HeaderEntry {
    pub name: String,
    pub position: usize,
}

impl Mappings {
    pub fn new(dest_headers: Vec<String>) -> Mappings {
        let mut header_mappings: Vec<Map> = Vec::new();

        for (index, dest_header) in dest_headers.iter().enumerate() {
            header_mappings.push(Map::new(index, dest_header.to_string()));
        };

        Mappings {
            mappings: header_mappings
        }
    }
}

impl Map {
    pub fn new(dest_pos: usize, dest_name: String) -> Map {
        Map {
            dest_entry: HeaderEntry {
                name: dest_name,
                position: dest_pos
            },
            source_entry: None
        }
    }

    pub fn set_source_entry(&mut self, new_source_entry: Option<HeaderEntry>) {
        self.source_entry = new_source_entry;
    }
}

impl fmt::Display for Map {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        let dest_text: String = match &self.source_entry {
            Some(header_entry) => {
                header_entry.name.to_string()
            }
            None => {
                "Empty".to_string()
            }
        };

        write!(f, "{} <- {}", self.dest_entry.name, dest_text)
    }
}