代码之家  ›  专栏  ›  技术社区  ›  Juan Leni

如何基于快速错误扩展错误?

  •  1
  • Juan Leni  · 技术社区  · 6 年前

    假设我有一个箱子 Lib1 声明如下:

    #[macro_use]
    extern crate quick_error;
    
    quick_error! {
        #[derive(Debug)]
        pub enum MyError {
            Foo {
                description("FooError")
            }
        }
    }
    

    我还有一个图书馆 Lib2 这取决于

    我想延长这个期限 MyError 还有一些特定于 . 这样我就可以重用在中声明的所有基本错误 .

    顺便说一句,我对这两个库都有完全的控制权,我可以根据需要修改它们。我肯定会继续使用 quick-error 为了这个。有没有可能扩展这个?

    注意:我已经看过了 Can I extend an enum with additional values? 这是我在开始提问之前就知道的。 quick_error . 加上对错误使用组合,使得错误处理非常复杂。有没有一个很好的模式来扩展库中的错误?

    1 回复  |  直到 6 年前
        1
  •  2
  •   E_net4 Tunn    6 年前

    如中所述 Can I extend an enum with additional values? quick_error 原因 你自己的类型。考虑一个假设的板条箱 lib2 :

    #[macro_use]
    extern crate quick_error;
    extern crate lib2;
    
    quick_error! {
        #[derive(Debug)]
        pub enum MyError {
            Foo {
                description("FooError")
            },
            Lib2(err: lib2::Error) {
                description("Failed to do something done by lib2")
                from() // derive `From<lib2::Error>`, very useful
                cause(err)
            }
        }
    }
    

    from() 子句使编译器派生 From<lib2::Error> 对于 MyError . 这是特别有用的,因为它使提高 Result<T, MyError> 锂离子电池2 ?