flw 0.0.3

Process text via configurable tasks
Documentation
use std::{fs:: File, io::BufReader};

use serde::Deserialize;
use serde_yaml;

#[derive(Debug, Deserialize)]
pub struct Task {
    pub data:Vec<String>,
    
    #[serde(skip)]
    pub operation:Option<TaskOperation>,
}

impl Task {
   pub fn update_task(&mut self,data:Vec<String>, task_operation:TaskOperation)
   {
       self.operation = Some(task_operation);
       self.data = data;
   }
}

#[derive(Debug, Deserialize)]
pub struct TaskList {
    pub tasks:Vec<Task>
}

#[derive(Debug)]
pub enum TaskOperation {
    Replace,
    Count
}

impl TaskList {
    pub fn read_tasks(tasks_file_path:&str) -> Vec<Task>
    {
        let file_handler = File::open(tasks_file_path).unwrap();
        let file_buf_read = BufReader::new(file_handler);
        let mut task_list:TaskList = serde_yaml::from_reader(file_buf_read).unwrap();
         
         task_list.tasks.iter_mut().for_each(|t:&mut Task|{
            if let Some(task_operation) = TaskList::identify_task_operation(&t.data[0]) {
                let data = t.data[1..].to_vec();
                t.update_task(data, task_operation);
            }
        });
        task_list.tasks
    }

    fn identify_task_operation(task_operation:&str) -> Option<TaskOperation>
    {
        match task_operation {
            "replace" => Some(TaskOperation::Replace),
            "count" => Some(TaskOperation::Count),
            _ => None
        }
    }
}