45
45
//! Now you might have noticed trailing braces `{}`. They are used to define
46
46
//! implementations. By default:
47
47
//!
48
- //! * `Error::description()` returns variant name as static string
49
48
//! * `Error::cause()` returns None (even if type wraps some value)
50
- //! * `Display` outputs `description()`
49
+ //! * `Display` outputs debug representation
51
50
//! * No `From` implementations are defined
52
51
//!
53
- //! To define description simply add `description(value)` inside braces:
54
- //!
55
52
//! ```rust
56
53
//! # #[macro_use] extern crate quick_error;
57
54
//! # fn main() {}
60
57
//! #[derive(Debug)]
61
58
//! pub enum SomeError {
62
59
//! Io(err: std::io::Error) {
63
- //! description( err.description() )
60
+ //! display("{}", err)
64
61
//! }
65
62
//! Utf8(err: std::str::Utf8Error) {
66
- //! description ("utf8 error")
63
+ //! display ("utf8 error")
67
64
//! }
68
65
//! }
69
66
//! }
70
67
//! ```
71
68
//!
72
- //! Normal rules for borrowing apply. So most of the time description either
73
- //! returns constant string or forwards description from enclosed type.
74
- //!
75
69
//! To change `cause` method to return some error, add `cause(value)`, for
76
70
//! example:
77
71
//!
84
78
//! pub enum SomeError {
85
79
//! Io(err: std::io::Error) {
86
80
//! cause(err)
87
- //! description(err.description())
88
81
//! }
89
82
//! Utf8(err: std::str::Utf8Error) {
90
- //! description ("utf8 error")
83
+ //! display ("utf8 error")
91
84
//! }
92
85
//! Other(err: Box<std::error::Error>) {
93
86
//! cause(&**err)
94
- //! description(err.description())
95
87
//! }
96
88
//! }
97
89
//! }
127
119
//! # #[macro_use] extern crate quick_error;
128
120
//! # fn main() {}
129
121
//! #
130
- //! use std::error::Error; // put methods like `description ()` of this trait into scope
122
+ //! use std::error::Error; // put methods like `source ()` of this trait into scope
131
123
//!
132
124
//! quick_error! {
133
125
//! #[derive(Debug)]
134
126
//! pub enum SomeError {
135
127
//! Io(err: std::io::Error) {
136
- //! display(x) -> ("{} : {}", x.description() , err)
128
+ //! display(x) -> ("I/O : {}", err)
137
129
//! }
138
130
//! Utf8(err: std::str::Utf8Error) {
139
- //! display(self_) -> ("{}, valid up to {}", self_.description() , err.valid_up_to())
131
+ //! display(self_) -> ("UTF-8 error. Valid up to {}", err.valid_up_to())
140
132
//! }
141
133
//! }
142
134
//! }
256
248
//!
257
249
//! More info on context in [this article](http://bit.ly/1PsuxDt).
258
250
//!
259
- //! All forms of `from`, `display`, `description`, ` cause`, and `context`
251
+ //! All forms of `from`, `display`, `cause`, and `context`
260
252
//! clauses can be combined and put in arbitrary order. Only `from` and
261
253
//! `context` can be used multiple times in single variant of enumeration.
262
254
//! Docstrings are also okay. Empty braces can be omitted as of quick_error
@@ -379,9 +371,6 @@ macro_rules! quick_error {
379
371
}
380
372
381
373
impl :: std:: error:: Error for $strname {
382
- fn description( & self ) -> & str {
383
- self . 0 . description( )
384
- }
385
374
#[ allow( deprecated) ]
386
375
fn cause( & self ) -> Option <& :: std:: error:: Error > {
387
376
self . 0 . cause( )
@@ -669,20 +658,6 @@ macro_rules! quick_error {
669
658
#[ allow( unused_doc_comment) ]
670
659
#[ allow( unused_doc_comments) ]
671
660
impl :: std:: error:: Error for $name {
672
- fn description( & self ) -> & str {
673
- match * self {
674
- $(
675
- $( #[ $imeta] ) *
676
- quick_error!( ITEM_PATTERN
677
- $name $item: $imode [ $( ref $var ) ,* ]
678
- ) => {
679
- quick_error!( FIND_DESCRIPTION_IMPL
680
- $item: $imode self fmt [ $( $var ) ,* ]
681
- { $( $funcs ) * } )
682
- }
683
- ) *
684
- }
685
- }
686
661
fn cause( & self ) -> Option <& :: std:: error:: Error > {
687
662
match * self {
688
663
$(
@@ -735,29 +710,21 @@ macro_rules! quick_error {
735
710
{ }
736
711
) => {
737
712
|self_: & $name, f: & mut :: std:: fmt:: Formatter | {
738
- write!( f, "{}" , :: std :: error :: Error :: description ( self_) )
713
+ write!( f, "{:? }" , self_)
739
714
}
740
715
} ;
741
716
( FIND_DESCRIPTION_IMPL $item: ident: $imode: tt $me: ident $fmt: ident
742
717
[ $( $var: ident ) ,* ]
743
718
{ description( $expr: expr) $( $tail: tt ) * }
744
- ) => {
745
- $expr
746
- } ;
719
+ ) => { } ;
747
720
( FIND_DESCRIPTION_IMPL $item: ident: $imode: tt $me: ident $fmt: ident
748
721
[ $( $var: ident ) ,* ]
749
722
{ $t: tt $( $tail: tt ) * }
750
- ) => {
751
- quick_error!( FIND_DESCRIPTION_IMPL
752
- $item: $imode $me $fmt [ $( $var ) ,* ]
753
- { $( $tail ) * } )
754
- } ;
723
+ ) => { } ;
755
724
( FIND_DESCRIPTION_IMPL $item: ident: $imode: tt $me: ident $fmt: ident
756
725
[ $( $var: ident ) ,* ]
757
726
{ }
758
- ) => {
759
- stringify!( $item)
760
- } ;
727
+ ) => { } ;
761
728
( FIND_CAUSE_IMPL $item: ident: $imode: tt
762
729
[ $( $var: ident ) ,* ]
763
730
{ cause( $expr: expr) $( $tail: tt ) * }
@@ -1047,15 +1014,13 @@ mod test {
1047
1014
fn bare_item_direct ( ) {
1048
1015
assert_eq ! ( format!( "{}" , Bare :: One ) , "One" . to_string( ) ) ;
1049
1016
assert_eq ! ( format!( "{:?}" , Bare :: One ) , "One" . to_string( ) ) ;
1050
- assert_eq ! ( Bare :: One . description( ) , "One" . to_string( ) ) ;
1051
1017
assert ! ( Bare :: One . cause( ) . is_none( ) ) ;
1052
1018
}
1053
1019
#[ test]
1054
1020
fn bare_item_trait ( ) {
1055
1021
let err: & Error = & Bare :: Two ;
1056
1022
assert_eq ! ( format!( "{}" , err) , "Two" . to_string( ) ) ;
1057
1023
assert_eq ! ( format!( "{:?}" , err) , "Two" . to_string( ) ) ;
1058
- assert_eq ! ( err. description( ) , "Two" . to_string( ) ) ;
1059
1024
assert ! ( err. cause( ) . is_none( ) ) ;
1060
1025
}
1061
1026
@@ -1079,8 +1044,6 @@ mod test {
1079
1044
"two: hello" . to_string( ) ) ;
1080
1045
assert_eq ! ( format!( "{:?}" , Wrapper :: from( Wrapped :: One ) ) ,
1081
1046
"Wrapper(One)" . to_string( ) ) ;
1082
- assert_eq ! ( Wrapper :: from( Wrapped :: One ) . description( ) ,
1083
- "One" . to_string( ) ) ;
1084
1047
}
1085
1048
1086
1049
quick_error ! {
@@ -1089,19 +1052,16 @@ mod test {
1089
1052
/// ParseFloat Error
1090
1053
ParseFloatError ( err: ParseFloatError ) {
1091
1054
from( )
1092
- description( err. description( ) )
1093
1055
display( "parse float error: {err}" , err=err)
1094
1056
cause( err)
1095
1057
}
1096
1058
Other ( descr: & ' static str ) {
1097
- description( descr)
1098
1059
display( "Error: {}" , descr)
1099
1060
}
1100
1061
/// FromUtf8 Error
1101
1062
FromUtf8Error ( err: Utf8Error , source: Vec <u8 >) {
1102
1063
cause( err)
1103
- display( me) -> ( "{desc} at index {pos}: {err}" , desc=me. description( ) , pos=err. valid_up_to( ) , err=err)
1104
- description( "utf8 error" )
1064
+ display( me) -> ( "{desc} at index {pos}: {err}" , desc="utf8 error" , pos=err. valid_up_to( ) , err=err)
1105
1065
from( err: FromUtf8Error ) -> ( err. utf8_error( ) . clone( ) , err. into_bytes( ) )
1106
1066
}
1107
1067
Discard {
@@ -1119,7 +1079,6 @@ mod test {
1119
1079
let err = TupleWrapper :: ParseFloatError ( cause. clone ( ) ) ;
1120
1080
assert_eq ! ( format!( "{}" , err) , format!( "parse float error: {}" , cause) ) ;
1121
1081
assert_eq ! ( format!( "{:?}" , err) , format!( "ParseFloatError({:?})" , cause) ) ;
1122
- assert_eq ! ( err. description( ) , cause. description( ) ) ;
1123
1082
assert_eq ! ( format!( "{:?}" , err. cause( ) . unwrap( ) ) , format!( "{:?}" , cause) ) ;
1124
1083
}
1125
1084
@@ -1129,7 +1088,6 @@ mod test {
1129
1088
let err: & Error = & TupleWrapper :: Other ( desc) ;
1130
1089
assert_eq ! ( format!( "{}" , err) , format!( "Error: {}" , desc) ) ;
1131
1090
assert_eq ! ( format!( "{:?}" , err) , format!( "Other({:?})" , desc) ) ;
1132
- assert_eq ! ( err. description( ) , desc) ;
1133
1091
assert ! ( err. cause( ) . is_none( ) ) ;
1134
1092
}
1135
1093
@@ -1138,9 +1096,8 @@ mod test {
1138
1096
let invalid_utf8: Vec < u8 > = vec ! [ 0 , 159 , 146 , 150 ] ;
1139
1097
let cause = String :: from_utf8 ( invalid_utf8. clone ( ) ) . unwrap_err ( ) . utf8_error ( ) ;
1140
1098
let err: & Error = & TupleWrapper :: FromUtf8Error ( cause. clone ( ) , invalid_utf8. clone ( ) ) ;
1141
- assert_eq ! ( format!( "{}" , err) , format!( "{desc} at index {pos}: {cause}" , desc=err . description ( ) , pos=cause. valid_up_to( ) , cause=cause) ) ;
1099
+ assert_eq ! ( format!( "{}" , err) , format!( "{desc} at index {pos}: {cause}" , desc="utf8 error" , pos=cause. valid_up_to( ) , cause=cause) ) ;
1142
1100
assert_eq ! ( format!( "{:?}" , err) , format!( "FromUtf8Error({:?}, {:?})" , cause, invalid_utf8) ) ;
1143
- assert_eq ! ( err. description( ) , "utf8 error" ) ;
1144
1101
assert_eq ! ( format!( "{:?}" , err. cause( ) . unwrap( ) ) , format!( "{:?}" , cause) ) ;
1145
1102
}
1146
1103
@@ -1166,7 +1123,6 @@ mod test {
1166
1123
let err: TupleWrapper = From :: from ( "hello" ) ;
1167
1124
assert_eq ! ( format!( "{}" , err) , format!( "Discard" ) ) ;
1168
1125
assert_eq ! ( format!( "{:?}" , err) , format!( "Discard" ) ) ;
1169
- assert_eq ! ( err. description( ) , "Discard" ) ;
1170
1126
assert ! ( err. cause( ) . is_none( ) ) ;
1171
1127
}
1172
1128
@@ -1175,7 +1131,6 @@ mod test {
1175
1131
let err: TupleWrapper = TupleWrapper :: Singleton ;
1176
1132
assert_eq ! ( format!( "{}" , err) , format!( "Just a string" ) ) ;
1177
1133
assert_eq ! ( format!( "{:?}" , err) , format!( "Singleton" ) ) ;
1178
- assert_eq ! ( err. description( ) , "Singleton" ) ;
1179
1134
assert ! ( err. cause( ) . is_none( ) ) ;
1180
1135
}
1181
1136
@@ -1185,13 +1140,11 @@ mod test {
1185
1140
// Utf8 Error
1186
1141
Utf8Error { err: Utf8Error , hint: Option <& ' static str > } {
1187
1142
cause( err)
1188
- display( me) -> ( "{desc} at index {pos}: {err}" , desc=me. description( ) , pos=err. valid_up_to( ) , err=err)
1189
- description( "utf8 error" )
1143
+ display( me) -> ( "{desc} at index {pos}: {err}" , desc="utf8 error" , pos=err. valid_up_to( ) , err=err)
1190
1144
from( err: Utf8Error ) -> { err: err, hint: None }
1191
1145
}
1192
1146
// Utf8 Error
1193
1147
ExcessComma { descr: & ' static str , } {
1194
- description( descr)
1195
1148
display( "Error: {}" , descr)
1196
1149
}
1197
1150
}
@@ -1202,9 +1155,8 @@ mod test {
1202
1155
let invalid_utf8: Vec < u8 > = vec ! [ 0 , 159 , 146 , 150 ] ;
1203
1156
let cause = String :: from_utf8 ( invalid_utf8. clone ( ) ) . unwrap_err ( ) . utf8_error ( ) ;
1204
1157
let err: & Error = & StructWrapper :: Utf8Error { err : cause. clone ( ) , hint : Some ( "nonsense" ) } ;
1205
- assert_eq ! ( format!( "{}" , err) , format!( "{desc} at index {pos}: {cause}" , desc=err . description ( ) , pos=cause. valid_up_to( ) , cause=cause) ) ;
1158
+ assert_eq ! ( format!( "{}" , err) , format!( "{desc} at index {pos}: {cause}" , desc="utf8 error" , pos=cause. valid_up_to( ) , cause=cause) ) ;
1206
1159
assert_eq ! ( format!( "{:?}" , err) , format!( "Utf8Error {{ err: {:?}, hint: {:?} }}" , cause, Some ( "nonsense" ) ) ) ;
1207
- assert_eq ! ( err. description( ) , "utf8 error" ) ;
1208
1160
assert_eq ! ( format!( "{:?}" , err. cause( ) . unwrap( ) ) , format!( "{:?}" , cause) ) ;
1209
1161
}
1210
1162
@@ -1223,7 +1175,6 @@ mod test {
1223
1175
let err = StructWrapper :: ExcessComma { descr : descr } ;
1224
1176
assert_eq ! ( format!( "{}" , err) , format!( "Error: {}" , descr) ) ;
1225
1177
assert_eq ! ( format!( "{:?}" , err) , format!( "ExcessComma {{ descr: {:?} }}" , descr) ) ;
1226
- assert_eq ! ( err. description( ) , descr) ;
1227
1178
assert ! ( err. cause( ) . is_none( ) ) ;
1228
1179
}
1229
1180
0 commit comments