# Trait std::default::Default 1.0.0 [−] [src]

    pub trait Default {
        fn default() -> Self;
    }

A trait for giving a type a useful default value.

Sometimes, you want to fall back to some kind of default value, and don't particularly care what it is. This comes up often with `struct`s that define a set of options:

    struct SomeOptions {
        foo: i32,
        bar: f32,
    }Run

How can we define some default values? You can use `Default`:

    #[derive(Default)]
    struct SomeOptions {
        foo: i32,
        bar: f32,
    }

    fn main() {
        let options: SomeOptions = Default::default();
    }Run

Now, you get all of the default values. Rust implements `Default` for various primitives types.

If you want to override a particular option, but still retain the other defaults:

    fn main() {
        let options = SomeOptions { foo: 42, ..Default::default() };
    }Run

## Derivable

This trait can be used with `#[derive]` if all of the type's fields implement `Default`. When `derive`d, it will use the default value for each field's type.

## How can I implement `Default`?

Provide an implementation for the `default()` method that returns the value of your type that should be the default:

    enum Kind {
        A,
        B,
        C,
    }

    impl Default for Kind {
        fn default() -> Kind { Kind::A }
    }Run

# Examples

    #[derive(Default)]
    struct SomeOptions {
        foo: i32,
        bar: f32,
    }Run

## Required Methods

### `fn default() -> Self`

Returns the "default value" for a type.

Default values are often some kind of initial value, identity value, or anything else that may make sense as a default.

# Examples

Using built-in default values:

    let i: i8 = Default::default();
    let (x, y): (Option<String>, f64) = Default::default();
    let (a, b, (c, d)): (i32, u32, (bool, bool)) = Default::default();Run

Making your own:

    enum Kind {
        A,
        B,
        C,
    }

    impl Default for Kind {
        fn default() -> Kind { Kind::A }
    }Run

## Implementors

- [src]
  `impl<T> Default for [T; 32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1] where
  T: Default,`
- [src]
  `impl<T> Default for AtomicPtr<T>`
- [src]
  `impl<T> Default for RefCell<T> where
  T: Default,`
- [src]
  `impl Default for usize`
- [src]
  `impl<A, B, C, D, E, F, G> Default for (A, B, C, D, E, F, G) where
  A: Default,
  B: Default,
  C: Default,
  D: Default,
  E: Default,
  F: Default,
  G: Default,`
- [src]
  `impl<A, B, C, D, E, F, G, H, I, J, K, L> Default for (A, B, C, D, E, F, G, H, I, J, K, L) where
  A: Default,
  B: Default,
  C: Default,
  D: Default,
  E: Default,
  F: Default,
  G: Default,
  H: Default,
  I: Default,
  J: Default,
  K: Default,
  L: Default,`
- [src]
  `impl<A, B, C> Default for (A, B, C) where
  A: Default,
  B: Default,
  C: Default,`
- [src]
  `impl<H> Default for BuildHasherDefault<H>`
- [src]
  `impl Default for AtomicUsize`
- [src]
  `impl<A, B, C, D, E, F, G, H, I> Default for (A, B, C, D, E, F, G, H, I) where
  A: Default,
  B: Default,
  C: Default,
  D: Default,
  E: Default,
  F: Default,
  G: Default,
  H: Default,
  I: Default,`
- [src]
  `impl<T> Default for Wrapping<T> where
  T: Default,`
- [src]
  `impl Default for i16`
- [src]
  `impl<T> Default for [T; 32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1] where
  T: Default,`
- [src]
  `impl<T> Default for Cell<T> where
  T: Default,`
- [src]
  `impl Default for isize`
- [src]
  `impl<A, B, C, D, E, F, G, H, I, J> Default for (A, B, C, D, E, F, G, H, I, J) where
  A: Default,
  B: Default,
  C: Default,
  D: Default,
  E: Default,
  F: Default,
  G: Default,
  H: Default,
  I: Default,
  J: Default,`
- [src]
  `impl Default for bool`
- [src]
  `impl Default for u32`
- [src]
  `impl<A, B, C, D, E, F, G, H> Default for (A, B, C, D, E, F, G, H) where
  A: Default,
  B: Default,
  C: Default,
  D: Default,
  E: Default,
  F: Default,
  G: Default,
  H: Default,`
- [src]
  `impl Default for AtomicIsize`
- [src]
  `impl<T> Default for [T; 32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1] where
  T: Default,`
- [src]
  `impl Default for u16`
- [src]
  `impl Default for u64`
- [src]
  `impl Default for AtomicU32`
- [src]
  `impl Default for i128`
- [src]
  `impl<T> Default for [T; 32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1] where
  T: Default,`
- [src]
  `impl Default for SipHasher`
- [src]
  `impl<T> Default for [T; 32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1] where
  T: Default,`
- [src]
  `impl<T> Default for [T; 32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1] where
  T: Default,`
- [src]
  `impl<T> Default for [T; 32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1] where
  T: Default,`
- [src]
  `impl<T> Default for [T; 32] where
  T: Default,`
- [src]
  `impl<T> Default for ManuallyDrop<T> where
  T: Default,`
- [src]
  `impl<T> Default for [T; 32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1] where
  T: Default,`
- [src]
  `impl<'a, T> Default for &'a mut [T]`
- [src]
  `impl Default for AtomicI16`
- [src]
  `impl<A, B, C, D, E> Default for (A, B, C, D, E) where
  A: Default,
  B: Default,
  C: Default,
  D: Default,
  E: Default,`
- [src]
  `impl<T> Default for [T; 32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1] where
  T: Default,`
- [src]
  `impl Default for SipHasher13`
- [src]
  `impl<'a, T> Default for &'a [T]`
- [src]
  `impl<T> Default for [T; 32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1] where
  T: Default,`
- [src]
  `impl<T> Default for [T; 32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1] where
  T: Default,`
- [src]
  `impl Default for f32`
- [src]
  `impl<T> Default for [T; 32 - 1 - 1 - 1 - 1 - 1 - 1 - 1] where
  T: Default,`
- [src]
  `impl<T> Default for [T; 32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1] where
  T: Default,`
- [src]
  `impl<T> Default for [T; 32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1] where
  T: Default,`
- [src]
  `impl<T> Default for [T; 32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1] where
  T: Default,`
- [src]
  `impl<A> Default for (A,) where
  A: Default,`
- [src]
  `impl<T> Default for [T; 32 - 1 - 1 - 1 - 1 - 1 - 1] where
  T: Default,`
- [src]
  `impl<T> Default for [T; 32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1] where
  T: Default,`
- [src]
  `impl<T> Default for Option<T>`
- [src]
  `impl Default for AtomicU16`
- [src]
  `impl<T> Default for [T; 32 - 1 - 1] where
  T: Default,`
- [src]
  `impl Default for i32`
- [src]
  `impl Default for AtomicBool`
- [src]
  `impl<T> Default for [T; 32 - 1 - 1 - 1 - 1 - 1] where
  T: Default,`
- [src]
  `impl Default for u8`
- [src]
  `impl<A, B, C, D, E, F, G, H, I, J, K> Default for (A, B, C, D, E, F, G, H, I, J, K) where
  A: Default,
  B: Default,
  C: Default,
  D: Default,
  E: Default,
  F: Default,
  G: Default,
  H: Default,
  I: Default,
  J: Default,
  K: Default,`
- [src]
  `impl<T> Default for [T; 32 - 1 - 1 - 1] where
  T: Default,`
- [src]
  `impl Default for f64`
- [src]
  `impl<T> Default for [T; 32 - 1] where
  T: Default,`
- [src]
  `impl Default for SipHasher24`
- [src]
  `impl<A, B, C, D, E, F> Default for (A, B, C, D, E, F) where
  A: Default,
  B: Default,
  C: Default,
  D: Default,
  E: Default,
  F: Default,`
- [src]
  `impl<A, B, C, D> Default for (A, B, C, D) where
  A: Default,
  B: Default,
  C: Default,
  D: Default,`
- [src]
  `impl Default for AtomicI8`
- [src]
  `impl Default for i8`
- [src]
  `impl<T> Default for PhantomData<T> where
  T: ?Sized,`
- [src]
  `impl Default for AtomicI32`
- [src]
  `impl<'a> Default for &'a str`
- [src]
  `impl<T> Default for [T; 32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1] where
  T: Default,`
- [src]
  `impl<T> Default for [T; 32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1] where
  T: Default,`
- [src]
  `impl<T> Default for UnsafeCell<T> where
  T: Default,`
- [src]
  `impl Default for char`
- [src]
  `impl<T> Default for [T; 32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1] where
  T: Default,`
- [src]
  `impl Default for AtomicI64`
- [src]
  `impl<T> Default for [T; 32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1] where
  T: Default,`
- [src]
  `impl<T> Default for [T; 32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1] where
  T: Default,`
- [src]
  `impl Default for u128`
- [src]
  `impl Default for Error`
- [src]
  `impl<T> Default for [T; 32 - 1 - 1 - 1 - 1] where
  T: Default,`
- [src]
  `impl Default for AtomicU64`
- [src]
  `impl<T> Default for Empty<T>`
- [src]
  `impl<T> Default for [T; 32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1] where
  T: Default,`
- [src]
  `impl Default for ()`
- [src]
  `impl<T> Default for [T; 32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1]`
- [src]
  `impl<T> Default for [T; 32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1] where
  T: Default,`
- [src]
  `impl<A, B> Default for (A, B) where
  A: Default,
  B: Default,`
- [src]
  `impl Default for i64`
- [src]
  `impl<T> Default for [T; 32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1] where
  T: Default,`
- [src]
  `impl Default for AtomicU8`
- [src]
  `impl<T> Default for [T; 32 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1] where
  T: Default,`
- [src]
  `impl Default for String`
- [src]
  `impl Default for Heap`
- [src]
  `impl<T> Default for Rc<T> where
  T: Default,`
- [src]
  `impl<T> Default for std::sync::Weak<T>`
- [src]
  `impl<T> Default for LinkedList<T>`
- [src]
  `impl<T> Default for Arc<T> where
  T: Default,`
- [src]
  `impl<T> Default for Box<T> where
  T: Default,`
- [src]
  `impl<'a, B> Default for Cow<'a, B> where
  B: ToOwned + ?Sized,
  <B as ToOwned>::Owned: Default,`
- [src]
  `impl<T> Default for std::rc::Weak<T>`
- [src]
  `impl<T> Default for BTreeSet<T> where
  T: Ord,`
- [src]
  `impl<K, V> Default for BTreeMap<K, V> where
  K: Ord,`
- [src]
  `impl Default for Box<str>`
- [src]
  `impl<T> Default for BinaryHeap<T> where
  T: Ord,`
- [src]
  `impl<T> Default for VecDeque<T>`
- [src]
  `impl<T> Default for Box<[T]>`
- [src]
  `impl<T> Default for Vec<T>`
- [src]
  `impl<K, V, S> Default for HashMap<K, V, S> where
  K: Eq + Hash,
  S: BuildHasher + Default,`
- [src]
  `impl Default for DefaultHasher`
- [src]
  `impl Default for RandomState`
- [src]
  `impl<T, S> Default for HashSet<T, S> where
  T: Eq + Hash,
  S: BuildHasher + Default,`
- [src]
  `impl<'a> Default for &'a CStr`
- [src]
  `impl Default for CString`
- [src]
  `impl Default for Box<CStr>`
- [src]
  `impl Default for OsString`
- [src]
  `impl Default for Box<OsStr>`
- [src]
  `impl<'a> Default for &'a OsStr`
- [src]
  `impl Default for PathBuf`
- [src]
  `impl Default for Condvar`
- [src]
  `impl<T: ?Sized + Default> Default for Mutex<T>`
- [src]
  `impl<T: Default> Default for RwLock<T>`
- [src]
  `impl Default for Duration`

# Help

## Keyboard Shortcuts

?
  Show this help dialog
S
  Focus the search field
⇤
  Move up in search results
⇥
  Move down in search results
⏎
  Go to active search result
+
  Collapse/expand all sections

## Search Tricks

Prefix searches with a type followed by a colon (e.g. `fn:`) to restrict the search to a given type.

Accepted types are: `fn`, `mod`, `struct`, `enum`, `trait`, `type`, `macro`, and `const`.

Search functions by type signature (e.g. `vec -> usize` or `* -> vec`)