diff options
| author | Daniel Schadt <kingdread@gmx.de> | 2020-04-04 13:48:56 +0200 | 
|---|---|---|
| committer | Daniel Schadt <kingdread@gmx.de> | 2020-04-04 13:55:20 +0200 | 
| commit | 4ec62bbac872bbfd95413af2f00c3f4a36c70630 (patch) | |
| tree | 22cac1ff6f9776565d9f35322c463ec6125c0bc7 | |
| parent | 22738da2cd36b4ae2e1fb5efd23373e6b77405a2 (diff) | |
| download | evtclib-4ec62bbac872bbfd95413af2f00c3f4a36c70630.tar.gz evtclib-4ec62bbac872bbfd95413af2f00c3f4a36c70630.tar.bz2 evtclib-4ec62bbac872bbfd95413af2f00c3f4a36c70630.zip | |
switch from quick_error to thiserror
thiserror seems to be the more modern approach that also works with the
new Error trait from std.
| -rw-r--r-- | Cargo.toml | 2 | ||||
| -rw-r--r-- | src/lib.rs | 24 | ||||
| -rw-r--r-- | src/raw/parser.rs | 52 | ||||
| -rw-r--r-- | src/statistics/math.rs | 8 | ||||
| -rw-r--r-- | src/statistics/mod.rs | 15 | 
5 files changed, 42 insertions, 59 deletions
| @@ -7,7 +7,7 @@ edition = "2018"  [dependencies]  num-traits = "0.2"  num-derive = "0.3" -quick-error = "1.2.1" +thiserror = "1.0"  byteorder = "1"  fnv = "1.0.3"  getset = "0.1" @@ -18,11 +18,12 @@  //! module](raw/parser/index.html#buffering))  #![feature(try_trait, stmt_expr_attributes, never_type)]  #[macro_use] -extern crate quick_error; -#[macro_use]  extern crate num_derive;  #[macro_use]  extern crate getset; + +use thiserror::Error; +  pub mod raw;  mod event; @@ -55,19 +56,12 @@ macro_rules! matches {      );  } -quick_error! { -    #[derive(Debug)] -    pub enum EvtcError { -        InvalidData { -            description("invalid data has been provided") -        } -        Utf8Error(err: ::std::string::FromUtf8Error) { -            from() -            description("utf8 decoding error") -            display("UTF-8 decoding error: {}", err) -            cause(err) -        } -    } +#[derive(Error, Debug)] +pub enum EvtcError { +    #[error("invalid data has been provided")] +    InvalidData, +    #[error("utf8 decoding error: {0}")] +    Utf8Error(#[from] std::string::FromUtf8Error),  }  /// The type of an agent. diff --git a/src/raw/parser.rs b/src/raw/parser.rs index fa3b36c..0e91f78 100644 --- a/src/raw/parser.rs +++ b/src/raw/parser.rs @@ -65,6 +65,7 @@  use byteorder::{LittleEndian, ReadBytesExt, LE};  use num_traits::FromPrimitive; +use thiserror::Error;  use std::io::{self, ErrorKind, Read};  use super::*; @@ -107,38 +108,25 @@ pub struct PartialEvtc {      pub skills: Vec<Skill>,  } -quick_error! { -    #[derive(Debug)] -    pub enum ParseError { -        Io(err: io::Error) { -            from() -            description("io error") -            display("I/O error: {}", err) -            cause(err) -        } -        Utf8Error(err: ::std::string::FromUtf8Error) { -            from() -            description("utf8 decoding error") -            display("UTF-8 decoding error: {}", err) -            cause(err) -        } -        InvalidData { -            from(::std::option::NoneError) -            description("invalid data") -        } -        MalformedHeader { -            description("malformed header") -        } -        UnknownRevision(rev: u8) { -            description("unknown revision") -            display("revision number not known: {}", rev) -        } -        InvalidZip(err: ::zip::result::ZipError) { -            from() -            description("zip error") -            display("Archive error: {}", err) -            cause(err) -        } +#[derive(Error, Debug)] +pub enum ParseError { +    #[error("IO error: {0}")] +    Io(#[from] io::Error), +    #[error("utf8 decoding error: {0}")] +    Utf8Error(#[from] std::string::FromUtf8Error), +    #[error("invalid data")] +    InvalidData, +    #[error("malformed header")] +    MalformedHeader, +    #[error("unknown revision: {0}")] +    UnknownRevision(u8), +    #[error("invalid archive: {0}")] +    InvalidZip(#[from] zip::result::ZipError), +} + +impl From<std::option::NoneError> for ParseError { +    fn from(_: std::option::NoneError) -> Self { +        ParseError::InvalidData      }  } diff --git a/src/statistics/math.rs b/src/statistics/math.rs index b7dd6ac..a0849a3 100644 --- a/src/statistics/math.rs +++ b/src/statistics/math.rs @@ -25,7 +25,8 @@ pub trait Monoid: Semigroup {  }  #[derive(Debug, Clone)] -struct Record<X, T, D> { +#[doc(hidden)] +pub struct Record<X, T, D> {      x: X,      tag: T,      data: D, @@ -63,6 +64,11 @@ where          RecordFunc { data: Vec::new() }      } +    #[doc(hidden)] +    pub fn data(&self) -> &[Record<X, T, D>] { +        &self.data +    } +      /// Insert a data point into the record func.      ///      /// Note that you should supply the *increment*, not the *absolute value*! diff --git a/src/statistics/mod.rs b/src/statistics/mod.rs index eccc3ee..3e42d9c 100644 --- a/src/statistics/mod.rs +++ b/src/statistics/mod.rs @@ -1,7 +1,7 @@  //! This module aids in the creation of actual boss statistics.  use super::*;  use std::collections::HashMap; -use std::error::Error; +use thiserror::Error;  pub mod boon;  pub mod damage; @@ -17,15 +17,10 @@ use self::trackers::{RunnableTracker, Tracker};  pub type StatResult<T> = Result<T, StatError>; -quick_error! { -    #[derive(Debug)] -    pub enum StatError { -        TrackerError(err: Box<dyn Error>) { -            description("tracker error") -            display("tracker returned an error: {}", err) -            cause(&**err) -        } -    } +#[derive(Error, Debug)] +pub enum StatError { +    #[error("tracker returned an error: {0}")] +    TrackerError(#[from] Box<dyn std::error::Error>),  }  macro_rules! try_tracker { | 
