switch from failure to anyhow

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
This commit is contained in:
Wolfgang Bumiller 2020-04-17 18:34:10 +02:00
parent 5affb691b5
commit 5dd21ee89b
36 changed files with 61 additions and 60 deletions

View File

@ -12,7 +12,7 @@ exclude = [ "debian" ]
proc-macro = true proc-macro = true
[dependencies] [dependencies]
failure = "0.1" anyhow = "1.0"
proc-macro2 = "1.0" proc-macro2 = "1.0"
quote = "1.0" quote = "1.0"
syn = { version = "1.0", features = [ "full", "visit-mut" ] } syn = { version = "1.0", features = [ "full", "visit-mut" ] }

View File

@ -9,7 +9,7 @@
use std::convert::{TryFrom, TryInto}; use std::convert::{TryFrom, TryInto};
use failure::Error; use anyhow::Error;
use proc_macro2::{Span, TokenStream}; use proc_macro2::{Span, TokenStream};
use quote::{quote, quote_spanned}; use quote::{quote, quote_spanned};

View File

@ -1,6 +1,6 @@
use std::convert::{TryFrom, TryInto}; use std::convert::{TryFrom, TryInto};
use failure::Error; use anyhow::Error;
use proc_macro2::{Ident, Span, TokenStream}; use proc_macro2::{Ident, Span, TokenStream};
use quote::quote_spanned; use quote::quote_spanned;

View File

@ -8,7 +8,7 @@
use std::convert::{TryFrom, TryInto}; use std::convert::{TryFrom, TryInto};
use std::mem; use std::mem;
use failure::Error; use anyhow::Error;
use proc_macro2::{Span, TokenStream}; use proc_macro2::{Span, TokenStream};
use quote::{quote, quote_spanned}; use quote::{quote, quote_spanned};
@ -408,10 +408,10 @@ fn create_wrapper_function(
// they have a default): // they have a default):
// //
// Whether the parameter is optional should have been verified by the schema // Whether the parameter is optional should have been verified by the schema
// verifier already, so here we just use failure::bail! instead of building a // verifier already, so here we just use anyhow::bail! instead of building a
// proper http error! // proper http error!
body.extend(quote_spanned! { span => body.extend(quote_spanned! { span =>
.ok_or_else(|| ::failure::format_err!( .ok_or_else(|| ::anyhow::format_err!(
"missing non-optional parameter: {}", "missing non-optional parameter: {}",
#name_str, #name_str,
))? ))?
@ -460,7 +460,7 @@ fn create_wrapper_function(
#body #body
Ok(::serde_json::to_value(#func_name(#args) #await_keyword #question_mark)?) Ok(::serde_json::to_value(#func_name(#args) #await_keyword #question_mark)?)
} else { } else {
::failure::bail!("api function wrapper called with a non-object json value"); ::anyhow::bail!("api function wrapper called with a non-object json value");
} }
}; };
@ -475,7 +475,7 @@ fn create_wrapper_function(
// mut input_params: ::serde_json::Value, // mut input_params: ::serde_json::Value,
// api_method_param: &'static ::proxmox::api::ApiMethod, // api_method_param: &'static ::proxmox::api::ApiMethod,
// rpc_env_param: &'a mut dyn ::proxmox::api::RpcEnvironment, // rpc_env_param: &'a mut dyn ::proxmox::api::RpcEnvironment,
//) -> ::std::result::Result<::serde_json::Value, ::failure::Error> { //) -> ::std::result::Result<::serde_json::Value, ::anyhow::Error> {
// #body // #body
//} //}
//::std::boxed::Box::pin(async move { //::std::boxed::Box::pin(async move {
@ -490,7 +490,7 @@ fn create_wrapper_function(
mut input_params: ::serde_json::Value, mut input_params: ::serde_json::Value,
api_method_param: &::proxmox::api::ApiMethod, api_method_param: &::proxmox::api::ApiMethod,
rpc_env_param: &mut dyn ::proxmox::api::RpcEnvironment, rpc_env_param: &mut dyn ::proxmox::api::RpcEnvironment,
) -> ::std::result::Result<::serde_json::Value, ::failure::Error> { ) -> ::std::result::Result<::serde_json::Value, ::anyhow::Error> {
#body #body
} }
}); });

View File

@ -13,7 +13,7 @@
use std::collections::HashMap; use std::collections::HashMap;
use std::convert::{TryFrom, TryInto}; use std::convert::{TryFrom, TryInto};
use failure::Error; use anyhow::Error;
use proc_macro2::{Ident, Span, TokenStream}; use proc_macro2::{Ident, Span, TokenStream};
use quote::quote_spanned; use quote::quote_spanned;

View File

@ -3,7 +3,7 @@
extern crate proc_macro; extern crate proc_macro;
extern crate proc_macro2; extern crate proc_macro2;
use failure::Error; use anyhow::Error;
use proc_macro::TokenStream as TokenStream_1; use proc_macro::TokenStream as TokenStream_1;
use proc_macro2::TokenStream; use proc_macro2::TokenStream;
@ -60,7 +60,7 @@ fn router_do(item: TokenStream) -> Result<TokenStream, Error> {
# use proxmox_api_macro::api; # use proxmox_api_macro::api;
# use proxmox::api::{ApiMethod, RpcEnvironment}; # use proxmox::api::{ApiMethod, RpcEnvironment};
use failure::Error; use anyhow::Error;
use serde_json::Value; use serde_json::Value;
#[api( #[api(

View File

@ -5,7 +5,7 @@
use proc_macro2::{Ident, Span, TokenStream}; use proc_macro2::{Ident, Span, TokenStream};
use failure::Error; use anyhow::Error;
/// A more relaxed version of Ident which allows hyphens. /// A more relaxed version of Ident which allows hyphens.
#[derive(Clone, Debug)] #[derive(Clone, Debug)]

View File

@ -8,7 +8,7 @@ use syn::punctuated::Punctuated;
use syn::spanned::Spanned; use syn::spanned::Spanned;
use syn::Token; use syn::Token;
use failure::Error; use anyhow::Error;
use crate::api::{self, Schema, SchemaItem}; use crate::api::{self, Schema, SchemaItem};

View File

@ -1,6 +1,6 @@
use proxmox_api_macro::api; use proxmox_api_macro::api;
use failure::Error; use anyhow::Error;
use serde_json::{json, Value}; use serde_json::{json, Value};
use proxmox::api::Permission; use proxmox::api::Permission;

View File

@ -1,6 +1,6 @@
use proxmox_api_macro::api; use proxmox_api_macro::api;
use failure::Error; use anyhow::Error;
use serde_json::Value; use serde_json::Value;
#[api( #[api(

View File

@ -4,7 +4,7 @@
use proxmox::api::{schema, RpcEnvironment}; use proxmox::api::{schema, RpcEnvironment};
use proxmox_api_macro::api; use proxmox_api_macro::api;
use failure::Error; use anyhow::Error;
use serde_json::{json, Value}; use serde_json::{json, Value};
pub const NAME_SCHEMA: schema::Schema = schema::StringSchema::new("Archive name.") pub const NAME_SCHEMA: schema::Schema = schema::StringSchema::new("Archive name.")

View File

@ -1,6 +1,6 @@
use proxmox_api_macro::api; use proxmox_api_macro::api;
use failure::Error; use anyhow::Error;
use serde_json::{json, Value}; use serde_json::{json, Value};
#[api( #[api(

View File

@ -6,7 +6,7 @@
use proxmox::api::schema; use proxmox::api::schema;
use proxmox_api_macro::api; use proxmox_api_macro::api;
use failure::Error; use anyhow::Error;
use serde::Deserialize; use serde::Deserialize;
use serde_json::Value; use serde_json::Value;

View File

@ -12,8 +12,7 @@ exclude = [ "debian" ]
proc-macro = true proc-macro = true
[dependencies] [dependencies]
#failure = { version = "0.1", default-features = false, features = ["std"] } anyhow = "1.0"
failure = "0.1"
proc-macro2 = "1.0" proc-macro2 = "1.0"
quote = "1.0" quote = "1.0"
syn = { version = "1.0", features = [ "full", "visit-mut" ] } syn = { version = "1.0", features = [ "full", "visit-mut" ] }

View File

@ -4,7 +4,7 @@ extern crate proc_macro2;
use std::iter::FromIterator; use std::iter::FromIterator;
use std::mem; use std::mem;
use failure::Error; use anyhow::Error;
use proc_macro::TokenStream as TokenStream_1; use proc_macro::TokenStream as TokenStream_1;
use proc_macro2::TokenStream; use proc_macro2::TokenStream;

View File

@ -13,7 +13,7 @@ exclude = [ "debian" ]
[dependencies] [dependencies]
# General dependencies # General dependencies
failure = "0.1" anyhow = "1.0"
lazy_static = "1.4" lazy_static = "1.4"
libc = "0.2" libc = "0.2"
nix = "0.16" nix = "0.16"

View File

@ -1,4 +1,4 @@
use failure::*; use anyhow::*;
use serde_json::Value; use serde_json::Value;
use std::cell::RefCell; use std::cell::RefCell;
use std::sync::Arc; use std::sync::Arc;

View File

@ -298,7 +298,7 @@ pub fn get_completions(
#[cfg(test)] #[cfg(test)]
mod test { mod test {
use failure::*; use anyhow::*;
use serde_json::Value; use serde_json::Value;
use crate::api::{cli::*, schema::*, *}; use crate::api::{cli::*, schema::*, *};

View File

@ -1,4 +1,4 @@
use failure::*; use anyhow::*;
use serde_json::Value; use serde_json::Value;
use crate::api::schema::*; use crate::api::schema::*;

View File

@ -1,4 +1,4 @@
use failure::*; use anyhow::*;
/// Shell quote type /// Shell quote type
pub use rustyline::completion::Quote; pub use rustyline::completion::Quote;

View File

@ -1,6 +1,6 @@
use std::io::Write; use std::io::Write;
use failure::*; use anyhow::*;
use serde_json::Value; use serde_json::Value;
use crate::api::schema::*; use crate::api::schema::*;

View File

@ -1,17 +1,17 @@
use std::fmt; use std::fmt;
use failure::Fail;
#[doc(hidden)] #[doc(hidden)]
pub use http::StatusCode; pub use http::StatusCode;
/// HTTP error including `StatusCode` and message. /// HTTP error including `StatusCode` and message.
#[derive(Debug, Fail)] #[derive(Debug)]
pub struct HttpError { pub struct HttpError {
pub code: StatusCode, pub code: StatusCode,
pub message: String, pub message: String,
} }
impl std::error::Error for HttpError {}
impl HttpError { impl HttpError {
pub fn new(code: StatusCode, message: String) -> Self { pub fn new(code: StatusCode, message: String) -> Self {
HttpError { code, message } HttpError { code, message }
@ -24,11 +24,11 @@ impl fmt::Display for HttpError {
} }
} }
/// Macro to create a HttpError inside a failure::Error /// Macro to create a HttpError inside a anyhow::Error
#[macro_export] #[macro_export]
macro_rules! http_err { macro_rules! http_err {
($status:ident, $msg:expr) => {{ ($status:ident, $msg:expr) => {{
::failure::Error::from($crate::api::error::HttpError::new( ::anyhow::Error::from($crate::api::error::HttpError::new(
$crate::api::error::StatusCode::$status, $crate::api::error::StatusCode::$status,
$msg, $msg,
)) ))

View File

@ -1,6 +1,6 @@
//! Module to generate and format API Documenation //! Module to generate and format API Documenation
use failure::Error; use anyhow::Error;
use std::io::Write; use std::io::Write;

View File

@ -3,7 +3,7 @@ use std::fmt;
use std::future::Future; use std::future::Future;
use std::pin::Pin; use std::pin::Pin;
use failure::Error; use anyhow::Error;
use http::request::Parts; use http::request::Parts;
use http::{Method, Response}; use http::{Method, Response};
use hyper::Body; use hyper::Body;
@ -18,7 +18,7 @@ use super::Permission;
/// ///
/// Most API handler are synchronous. Use this to define such handler: /// Most API handler are synchronous. Use this to define such handler:
/// ``` /// ```
/// # use failure::*; /// # use anyhow::*;
/// # use serde_json::{json, Value}; /// # use serde_json::{json, Value};
/// # use proxmox::api::{*, schema::*}; /// # use proxmox::api::{*, schema::*};
/// # /// #
@ -44,7 +44,7 @@ pub type ApiHandlerFn = &'static (dyn Fn(Value, &ApiMethod, &mut dyn RpcEnvironm
/// ///
/// Returns a future Value. /// Returns a future Value.
/// ``` /// ```
/// # use failure::*; /// # use anyhow::*;
/// # use serde_json::{json, Value}; /// # use serde_json::{json, Value};
/// # use proxmox::api::{*, schema::*}; /// # use proxmox::api::{*, schema::*};
/// # /// #
@ -70,14 +70,14 @@ pub type ApiAsyncHandlerFn = &'static (dyn for<'a> Fn(Value, &'static ApiMethod,
+ Send + Send
+ Sync); + Sync);
pub type ApiFuture<'a> = Pin<Box<dyn Future<Output = Result<Value, failure::Error>> + Send + 'a>>; pub type ApiFuture<'a> = Pin<Box<dyn Future<Output = Result<Value, anyhow::Error>> + Send + 'a>>;
/// Asynchronous HTTP API handlers /// Asynchronous HTTP API handlers
/// ///
/// They get low level access to request and response data. Use this /// They get low level access to request and response data. Use this
/// to implement custom upload/download functions. /// to implement custom upload/download functions.
/// ``` /// ```
/// # use failure::*; /// # use anyhow::*;
/// # use serde_json::{json, Value}; /// # use serde_json::{json, Value};
/// # use proxmox::api::{*, schema::*}; /// # use proxmox::api::{*, schema::*};
/// # /// #
@ -117,7 +117,7 @@ pub type ApiAsyncHttpHandlerFn = &'static (dyn Fn(
/// The output of an asynchronous API handler is a future yielding a `Response`. /// The output of an asynchronous API handler is a future yielding a `Response`.
pub type ApiResponseFuture = pub type ApiResponseFuture =
Pin<Box<dyn Future<Output = Result<Response<Body>, failure::Error>> + Send>>; Pin<Box<dyn Future<Output = Result<Response<Body>, anyhow::Error>> + Send>>;
/// Enum for different types of API handler functions. /// Enum for different types of API handler functions.
pub enum ApiHandler { pub enum ApiHandler {
@ -213,7 +213,7 @@ macro_rules! list_subdirs_api_method {
/// all `const fn(mut self, ..)` methods to configure them. /// all `const fn(mut self, ..)` methods to configure them.
/// ///
///``` ///```
/// # use failure::*; /// # use anyhow::*;
/// # use serde_json::{json, Value}; /// # use serde_json::{json, Value};
/// # use proxmox::api::{*, schema::*}; /// # use proxmox::api::{*, schema::*};
/// # /// #

View File

@ -6,7 +6,7 @@
use std::fmt; use std::fmt;
use failure::*; use anyhow::{bail, format_err, Error};
use serde_json::{json, Value}; use serde_json::{json, Value};
use url::form_urlencoded; use url::form_urlencoded;
@ -17,11 +17,13 @@ use crate::api::const_regex::ConstRegexPattern;
/// The validation functions may produce several error message, /// The validation functions may produce several error message,
/// i.e. when validation objects, it can produce one message for each /// i.e. when validation objects, it can produce one message for each
/// erroneous object property. /// erroneous object property.
#[derive(Default, Debug, Fail)] #[derive(Default, Debug)]
pub struct ParameterError { pub struct ParameterError {
error_list: Vec<Error>, error_list: Vec<Error>,
} }
impl std::error::Error for ParameterError {}
// fixme: record parameter names, to make it usefull to display errord // fixme: record parameter names, to make it usefull to display errord
// on HTML forms. // on HTML forms.
impl ParameterError { impl ParameterError {

View File

@ -18,7 +18,7 @@
//! ... //! ...
//! ``` //! ```
use failure::*; use anyhow::*;
use std::collections::HashMap; use std::collections::HashMap;
use std::collections::HashSet; use std::collections::HashSet;

View File

@ -33,7 +33,7 @@ pub fn io_err_other<E: ToString>(e: E) -> io::Error {
/// Usage examples: /// Usage examples:
/// ///
/// ``` /// ```
/// # use failure::{bail, Error}; /// # use anyhow::{bail, Error};
/// use nix::{dir::Dir, fcntl::OFlag, sys::stat::Mode}; /// use nix::{dir::Dir, fcntl::OFlag, sys::stat::Mode};
/// ///
/// use proxmox::sys::error::SysError; /// use proxmox::sys::error::SysError;
@ -114,7 +114,7 @@ impl SysError for nix::Error {
/// ///
/// ```no_run /// ```no_run
/// # use std::os::unix::io::RawFd; /// # use std::os::unix::io::RawFd;
/// # use failure::{bail, Error}; /// # use anyhow::{bail, Error};
/// ///
/// use proxmox::sys::error::SysResult; /// use proxmox::sys::error::SysResult;
/// ///

View File

@ -1,6 +1,6 @@
//! Linux specific helpers and syscall wrapper //! Linux specific helpers and syscall wrapper
use failure::*; use anyhow::*;
pub mod magic; pub mod magic;
pub mod pid; pub mod pid;

View File

@ -7,7 +7,7 @@ use std::str::FromStr;
use std::sync::RwLock; use std::sync::RwLock;
use std::time::Instant; use std::time::Instant;
use failure::*; use anyhow::*;
use lazy_static::lazy_static; use lazy_static::lazy_static;
use libc; use libc;
use nix::unistd::Pid; use nix::unistd::Pid;

View File

@ -7,7 +7,7 @@ use std::os::unix::ffi::OsStrExt;
use std::path::PathBuf; use std::path::PathBuf;
use std::str::FromStr; use std::str::FromStr;
use failure::{bail, format_err, Error}; use anyhow::{bail, format_err, Error};
use nix::sys::stat; use nix::sys::stat;
use nix::unistd::Pid; use nix::unistd::Pid;

View File

@ -2,7 +2,7 @@ use std::io::{Read, Write};
use std::mem::MaybeUninit; use std::mem::MaybeUninit;
use std::os::unix::io::AsRawFd; use std::os::unix::io::AsRawFd;
use failure::*; use anyhow::*;
use crate::try_block; use crate::try_block;

View File

@ -1,7 +1,7 @@
//! A set of macros for I/O handling. These provide for `std::io::Error` what `failure` provides //! A set of macros for I/O handling. These provide for `std::io::Error` what `anyhow` provides
//! for `failure::Error.` //! for `anyhow::Error.`
/// Like failure's `format_err` but producing a `std::io::Error`. /// Like anyhow's `format_err` but producing a `std::io::Error`.
#[macro_export] #[macro_export]
macro_rules! io_format_err { macro_rules! io_format_err {
($($msg:tt)+) => { ($($msg:tt)+) => {
@ -19,7 +19,7 @@ macro_rules! io_bail_last {
}; };
} }
/// Like failure's `bail` but producing a `std::io::Error`. /// Like anyhow's `bail` but producing a `std::io::Error`.
#[macro_export] #[macro_export]
macro_rules! io_bail { macro_rules! io_bail {
($($msg:tt)+) => {{ ($($msg:tt)+) => {{

View File

@ -6,7 +6,7 @@ use std::io::{BufRead, BufReader, Write};
use std::os::unix::io::{AsRawFd, FromRawFd, RawFd}; use std::os::unix::io::{AsRawFd, FromRawFd, RawFd};
use std::path::Path; use std::path::Path;
use failure::{bail, format_err, Error}; use anyhow::{bail, format_err, Error};
use nix::errno::Errno; use nix::errno::Errno;
use nix::fcntl::OFlag; use nix::fcntl::OFlag;
use nix::sys::stat; use nix::sys::stat;
@ -242,7 +242,7 @@ pub fn create_dir<P: AsRef<Path>>(path: P, options: CreateOptions) -> Result<(),
/// # use nix::sys::stat::Mode; /// # use nix::sys::stat::Mode;
/// # use nix::unistd::{Gid, Uid}; /// # use nix::unistd::{Gid, Uid};
/// # use proxmox::tools::fs::{create_path, CreateOptions}; /// # use proxmox::tools::fs::{create_path, CreateOptions};
/// # fn code() -> Result<(), failure::Error> { /// # fn code() -> Result<(), anyhow::Error> {
/// create_path( /// create_path(
/// "/var/lib/mytool/wwwdata", /// "/var/lib/mytool/wwwdata",
/// None, /// None,

View File

@ -1,6 +1,6 @@
//! This is a general utility crate used by all our rust projects. //! This is a general utility crate used by all our rust projects.
use failure::*; use anyhow::*;
use lazy_static::lazy_static; use lazy_static::lazy_static;
pub mod as_any; pub mod as_any;
@ -63,7 +63,7 @@ macro_rules! static_assert_size {
/// #### Example: /// #### Example:
/// ``` /// ```
/// # use proxmox::try_block; /// # use proxmox::try_block;
/// # use failure::*; /// # use anyhow::*;
/// # let some_condition = false; /// # let some_condition = false;
/// let result = try_block!({ /// let result = try_block!({
/// if (some_condition) { /// if (some_condition) {

View File

@ -1,6 +1,6 @@
//! Some parsing utilities. //! Some parsing utilities.
use failure::{bail, Error}; use anyhow::{bail, Error};
/// Parse a hexadecimal digit into a byte. /// Parse a hexadecimal digit into a byte.
#[inline] #[inline]

View File

@ -3,7 +3,7 @@
use std::borrow::{Borrow, BorrowMut}; use std::borrow::{Borrow, BorrowMut};
use std::fmt; use std::fmt;
use failure::{bail, Error}; use anyhow::{bail, Error};
use crate::tools::parse::hex_nibble; use crate::tools::parse::hex_nibble;