@@ -153,6 +153,36 @@ pub trait Error: Debug + Display {
153
153
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
154
154
impl < ' a , E : Error + ' a > From < E > for Box < dyn Error + ' a > {
155
155
/// Converts a type of [`Error`] into a box of dyn [`Error`].
156
+ ///
157
+ /// # Examples
158
+ ///
159
+ /// ```
160
+ /// use std::error::Error;
161
+ /// use std::fmt;
162
+ /// use std::mem;
163
+ ///
164
+ /// #[derive(Debug)]
165
+ /// struct AnError;
166
+ ///
167
+ /// impl fmt::Display for AnError {
168
+ /// fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
169
+ /// write!(f , "An error")
170
+ /// }
171
+ /// }
172
+ ///
173
+ /// impl Error for AnError {
174
+ /// fn description(&self) -> &str {
175
+ /// "Description of an error"
176
+ /// }
177
+ /// }
178
+ ///
179
+ /// fn main() {
180
+ /// let an_error = AnError;
181
+ /// assert!(0 == mem::size_of_val(&an_error));
182
+ /// let a_boxed_error = Box::<Error>::from(an_error);
183
+ /// assert!(mem::size_of::<Box<dyn Error>>() == mem::size_of_val(&a_boxed_error))
184
+ /// }
185
+ /// ```
156
186
fn from ( err : E ) -> Box < dyn Error + ' a > {
157
187
Box :: new ( err)
158
188
}
@@ -162,6 +192,41 @@ impl<'a, E: Error + 'a> From<E> for Box<dyn Error + 'a> {
162
192
impl < ' a , E : Error + Send + Sync + ' a > From < E > for Box < dyn Error + Send + Sync + ' a > {
163
193
/// Converts a type of [`Error`] + [`Send`] + [`Sync`] into a box of dyn [`Error`] +
164
194
/// [`Send`] + [`Sync`].
195
+ ///
196
+ /// # Examples
197
+ ///
198
+ /// ```
199
+ /// use std::error::Error;
200
+ /// use std::fmt;
201
+ /// use std::mem;
202
+ ///
203
+ /// #[derive(Debug)]
204
+ /// struct AnError;
205
+ ///
206
+ /// impl fmt::Display for AnError {
207
+ /// fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
208
+ /// write!(f , "An error")
209
+ /// }
210
+ /// }
211
+ ///
212
+ /// impl Error for AnError {
213
+ /// fn description(&self) -> &str {
214
+ /// "Description of an error"
215
+ /// }
216
+ /// }
217
+ ///
218
+ /// unsafe impl Send for AnError {}
219
+ ///
220
+ /// unsafe impl Sync for AnError {}
221
+ ///
222
+ /// fn main() {
223
+ /// let an_error = AnError;
224
+ /// assert!(0 == mem::size_of_val(&an_error));
225
+ /// let a_boxed_error = Box::<Error + Send + Sync>::from(an_error);
226
+ /// assert!(
227
+ /// mem::size_of::<Box<dyn Error + Send + Sync>>() == mem::size_of_val(&a_boxed_error))
228
+ /// }
229
+ /// ```
165
230
fn from ( err : E ) -> Box < dyn Error + Send + Sync + ' a > {
166
231
Box :: new ( err)
167
232
}
@@ -170,6 +235,20 @@ impl<'a, E: Error + Send + Sync + 'a> From<E> for Box<dyn Error + Send + Sync +
170
235
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
171
236
impl From < String > for Box < dyn Error + Send + Sync > {
172
237
/// Converts a [`String`] into a box of dyn [`Error`] + [`Send`] + [`Sync`].
238
+ ///
239
+ /// # Examples
240
+ ///
241
+ /// ```
242
+ /// use std::error::Error;
243
+ /// use std::mem;
244
+ ///
245
+ /// fn main() {
246
+ /// let a_string_error = "a string error".to_string();
247
+ /// let a_boxed_error = Box::<Error + Send + Sync>::from(a_string_error);
248
+ /// assert!(
249
+ /// mem::size_of::<Box<dyn Error + Send + Sync>>() == mem::size_of_val(&a_boxed_error))
250
+ /// }
251
+ /// ```
173
252
fn from ( err : String ) -> Box < dyn Error + Send + Sync > {
174
253
#[ derive( Debug ) ]
175
254
struct StringError ( String ) ;
@@ -191,6 +270,19 @@ impl From<String> for Box<dyn Error + Send + Sync> {
191
270
#[ stable( feature = "string_box_error" , since = "1.6.0" ) ]
192
271
impl From < String > for Box < dyn Error > {
193
272
/// Converts a [`String`] into a box of dyn [`Error`].
273
+ ///
274
+ /// # Examples
275
+ ///
276
+ /// ```
277
+ /// use std::error::Error;
278
+ /// use std::mem;
279
+ ///
280
+ /// fn main() {
281
+ /// let a_string_error = "a string error".to_string();
282
+ /// let a_boxed_error = Box::<Error>::from(a_string_error);
283
+ /// assert!(mem::size_of::<Box<dyn Error>>() == mem::size_of_val(&a_boxed_error))
284
+ /// }
285
+ /// ```
194
286
fn from ( str_err : String ) -> Box < dyn Error > {
195
287
let err1: Box < dyn Error + Send + Sync > = From :: from ( str_err) ;
196
288
let err2: Box < dyn Error > = err1;
@@ -201,6 +293,20 @@ impl From<String> for Box<dyn Error> {
201
293
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
202
294
impl < ' a , ' b > From < & ' b str > for Box < dyn Error + Send + Sync + ' a > {
203
295
/// Converts a [`str`] into a box of dyn [`Error`] + [`Send`] + [`Sync`].
296
+ ///
297
+ /// # Examples
298
+ ///
299
+ /// ```
300
+ /// use std::error::Error;
301
+ /// use std::mem;
302
+ ///
303
+ /// fn main() {
304
+ /// let a_str_error = "a str error";
305
+ /// let a_boxed_error = Box::<Error + Send + Sync>::from(a_str_error);
306
+ /// assert!(
307
+ /// mem::size_of::<Box<dyn Error + Send + Sync>>() == mem::size_of_val(&a_boxed_error))
308
+ /// }
309
+ /// ```
204
310
fn from ( err : & ' b str ) -> Box < dyn Error + Send + Sync + ' a > {
205
311
From :: from ( String :: from ( err) )
206
312
}
@@ -209,6 +315,19 @@ impl<'a, 'b> From<&'b str> for Box<dyn Error + Send + Sync + 'a> {
209
315
#[ stable( feature = "string_box_error" , since = "1.6.0" ) ]
210
316
impl < ' a > From < & ' a str > for Box < dyn Error > {
211
317
/// Converts a [`str`] into a box of dyn [`Error`].
318
+ ///
319
+ /// # Examples
320
+ ///
321
+ /// ```
322
+ /// use std::error::Error;
323
+ /// use std::mem;
324
+ ///
325
+ /// fn main() {
326
+ /// let a_str_error = "a str error";
327
+ /// let a_boxed_error = Box::<Error>::from(a_str_error);
328
+ /// assert!(mem::size_of::<Box<dyn Error>>() == mem::size_of_val(&a_boxed_error))
329
+ /// }
330
+ /// ```
212
331
fn from ( err : & ' a str ) -> Box < dyn Error > {
213
332
From :: from ( String :: from ( err) )
214
333
}
@@ -217,6 +336,21 @@ impl<'a> From<&'a str> for Box<dyn Error> {
217
336
#[ stable( feature = "cow_box_error" , since = "1.22.0" ) ]
218
337
impl < ' a , ' b > From < Cow < ' b , str > > for Box < dyn Error + Send + Sync + ' a > {
219
338
/// Converts a [`Cow`] into a box of dyn [`Error`] + [`Send`] + [`Sync`].
339
+ ///
340
+ /// # Examples
341
+ ///
342
+ /// ```
343
+ /// use std::error::Error;
344
+ /// use std::mem;
345
+ /// use std::borrow::Cow;
346
+ ///
347
+ /// fn main() {
348
+ /// let a_cow_str_error = Cow::from("a str error");
349
+ /// let a_boxed_error = Box::<Error + Send + Sync>::from(a_cow_str_error);
350
+ /// assert!(
351
+ /// mem::size_of::<Box<dyn Error + Send + Sync>>() == mem::size_of_val(&a_boxed_error))
352
+ /// }
353
+ /// ```
220
354
fn from ( err : Cow < ' b , str > ) -> Box < dyn Error + Send + Sync + ' a > {
221
355
From :: from ( String :: from ( err) )
222
356
}
@@ -225,6 +359,20 @@ impl<'a, 'b> From<Cow<'b, str>> for Box<dyn Error + Send + Sync + 'a> {
225
359
#[ stable( feature = "cow_box_error" , since = "1.22.0" ) ]
226
360
impl < ' a > From < Cow < ' a , str > > for Box < dyn Error > {
227
361
/// Converts a [`Cow`] into a box of dyn [`Error`].
362
+ ///
363
+ /// # Examples
364
+ ///
365
+ /// ```
366
+ /// use std::error::Error;
367
+ /// use std::mem;
368
+ /// use std::borrow::Cow;
369
+ ///
370
+ /// fn main() {
371
+ /// let a_cow_str_error = Cow::from("a str error");
372
+ /// let a_boxed_error = Box::<Error>::from(a_cow_str_error);
373
+ /// assert!(mem::size_of::<Box<dyn Error>>() == mem::size_of_val(&a_boxed_error))
374
+ /// }
375
+ /// ```
228
376
fn from ( err : Cow < ' a , str > ) -> Box < dyn Error > {
229
377
From :: from ( String :: from ( err) )
230
378
}
0 commit comments