toodoux 0.4.1

A modern task management tool
Documentation
use crate::task::UID;
use serde_json as json;
use std::{fmt, io};

#[derive(Debug)]
pub enum Error {
  CannotOpenFile(io::Error),
  CannotSave(io::Error),
  CannotDeserializeFromJSON(json::Error),
  CannotDeserializeFromTOML(toml::de::Error),
  CannotSerializeToTOML(toml::ser::Error),
  CannotDeserializeFromSerde(serde::de::value::Error),
  NoConfigDir,
  UnknownNote(UID),
}

impl fmt::Display for Error {
  fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
    match *self {
      Error::CannotOpenFile(ref e) => {
        write!(f, "cannot open file: {}", e)
      }

      Error::CannotSave(ref e) => write!(f, "cannot save: {}", e),

      Error::CannotDeserializeFromJSON(ref e) => {
        write!(f, "cannot deserialize from JSON: {}", e)
      }

      Error::CannotDeserializeFromTOML(ref e) => {
        write!(f, "cannot deserialize from TOML: {}", e)
      }

      Error::CannotSerializeToTOML(ref e) => {
        write!(f, "cannot serialize to TOML: {}", e)
      }

      Error::CannotDeserializeFromSerde(ref e) => {
        write!(f, "cannot deserialize: {}", e)
      }

      Error::NoConfigDir => f.write_str("cannot find configuration directory"),

      Error::UnknownNote(uid) => write!(f, "note {} doesn’t exist", uid),
    }
  }
}

impl From<json::Error> for Error {
  fn from(err: json::Error) -> Self {
    Self::CannotDeserializeFromJSON(err)
  }
}

impl From<toml::de::Error> for Error {
  fn from(err: toml::de::Error) -> Self {
    Self::CannotDeserializeFromTOML(err)
  }
}

impl From<toml::ser::Error> for Error {
  fn from(err: toml::ser::Error) -> Self {
    Self::CannotSerializeToTOML(err)
  }
}

impl From<serde::de::value::Error> for Error {
  fn from(err: serde::de::value::Error) -> Self {
    Self::CannotDeserializeFromSerde(err)
  }
}