use crate::{cli::Args, domain}; use std::fs::File; #[derive(Debug)] pub enum Error { OpenFile, Switch(domain::switch::Error), } impl std::fmt::Display for Error { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { Error::OpenFile => f.write_str("Cannot open file"), Error::Switch(inner) => write!(f, "Cannot switch between states: {}", inner), } } } impl std::error::Error for Error {} pub fn execute(args: &Args) -> Result<(), Error> { let content = std::fs::read_to_string(&args.file).map_err(|_| Error::OpenFile)?; let writer = File::create(args.output.as_ref().unwrap_or(&args.file)).map_err(|_| Error::OpenFile)?; domain::switch::execute(domain::switch::Request { content: &content, writer, sections: &args.sections, }) .map_err(Error::Switch) }