# Trait std::default::Default

1.0.0 · source ·

    pub trait Default: Sized {
        // Required method
        fn default() -> Self;
    }

Expand description

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.

#### `enum`s

When using `#[derive(Default)]` on an `enum`, you need to choose which unit variant will be default. You do this by placing the `#[default]` attribute on the variant.

    #[derive(Default)]
    enum Kind {
        #[default]
        A,
        B,
        C,
    }

Run

You cannot use the `#[default]` attribute on non-unit or non-exhaustive variants.

### 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() -> Self { Kind::A }
    }

Run

## Examples

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

Run

## Required Methods§

source

#### 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() -> Self { Kind::A }
    }

Run

## Object Safety§

This trait is not object safe.

## Implementors§

source§

### impl Default for &str

1.10.0 · source§

### impl Default for &CStr

1.9.0 · source§

### impl Default for &OsStr

1.28.0 · source§

### impl Default for &mut str

source§

### impl Default for bool

source§

### impl Default for char

source§

### impl Default for f32

source§

### impl Default for f64

source§

### impl Default for i8

source§

### impl Default for i16

source§

### impl Default for i32

source§

### impl Default for i64

source§

### impl Default for i128

source§

### impl Default for isize

source§

### impl Default for u8

source§

### impl Default for u16

source§

### impl Default for u32

source§

### impl Default for u64

source§

### impl Default for u128

source§

### impl Default for ()

source§

### impl Default for usize

source§

### impl Default for Global

1.28.0 · source§

### impl Default for System

1.17.0 · source§

### impl Default for Box<str>

1.17.0 · source§

### impl Default for Box<CStr>

1.17.0 · source§

### impl Default for Box<OsStr>

1.13.0 · source§

### impl Default for DefaultHasher

1.7.0 · source§

### impl Default for RandomState

1.10.0 · source§

### impl Default for CString

1.9.0 · source§

### impl Default for OsString

source§

### impl Default for Error

1.75.0 · source§

### impl Default for FileTimes

source§

### impl Default for SipHasher

source§

### impl Default for std::io::Empty

source§

### impl Default for Sink

1.33.0 · source§

### impl Default for PhantomPinned

source§

### impl Default for RangeFull

1.17.0 · source§

### impl Default for PathBuf

1.75.0 · source§

### impl Default for ExitCode

The default value is `ExitCode::SUCCESS`

1.73.0 · source§

### impl Default for ExitStatus

The default value is one which indicates successful completion.

source§

### impl Default for String

source§

### impl Default for AtomicBool

1.34.0 · source§

### impl Default for AtomicI8

1.34.0 · source§

### impl Default for AtomicI16

1.34.0 · source§

### impl Default for AtomicI32

1.34.0 · source§

### impl Default for AtomicI64

source§

### impl Default for AtomicIsize

1.34.0 · source§

### impl Default for AtomicU8

1.34.0 · source§

### impl Default for AtomicU16

1.34.0 · source§

### impl Default for AtomicU32

1.34.0 · source§

### impl Default for AtomicU64

source§

### impl Default for AtomicUsize

1.10.0 · source§

### impl Default for Condvar

1.3.0 · source§

### impl Default for Duration

1.70.0 · source§

### impl<'a, K, V> Default for std::collections::btree_map::Iter<'a, K, V>where K: 'a, V: 'a,

1.70.0 · source§

### impl<'a, K, V> Default for std::collections::btree_map::IterMut<'a, K, V>where K: 'a, V: 'a,

1.70.0 · source§

### impl<A, B> Default for Chain<A, B>where A: Default, B: Default,

1.11.0 · source§

### impl<B> Default for Cow<'_, B>where B: ToOwned + ?Sized, <B as ToOwned>::Owned: Default,

1.7.0 · source§

### impl<H> Default for BuildHasherDefault<H>

1.70.0 · source§

### impl<I> Default for Cloned<I>where I: Default,

1.70.0 · source§

### impl<I> Default for Copied<I>where I: Default,

1.70.0 · source§

### impl<I> Default for Enumerate<I>where I: Default,

1.70.0 · source§

### impl<I> Default for Flatten<I>where I: Default + Iterator, <I as Iterator>::Item: IntoIterator,

1.70.0 · source§

### impl<I> Default for Fuse<I>where I: Default,

1.70.0 · source§

### impl<I> Default for Rev<I>where I: Default,

source§

### impl<Idx> Default for std::ops::Range<Idx>where Idx: Default,

1.70.0 · source§

### impl<K, V> Default for Keys<'_, K, V>

1.70.0 · source§

### impl<K, V> Default for std::collections::btree_map::Range<'_, K, V>

1.70.0 · source§

### impl<K, V> Default for Values<'_, K, V>

source§

### impl<K, V> Default for BTreeMap<K, V>

1.70.0 · source§

### impl<K, V, A> Default for std::collections::btree_map::IntoIter<K, V, A>where A: Allocator + Default + Clone,

1.70.0 · source§

### impl<K, V, A> Default for IntoKeys<K, V, A>where A: Allocator + Default + Clone,

1.70.0 · source§

### impl<K, V, A> Default for IntoValues<K, V, A>where A: Allocator + Default + Clone,

source§

### impl<K, V, S> Default for HashMap<K, V, S>where S: Default,

source§

### impl<T> Default for &[T]

1.5.0 · source§

### impl<T> Default for &mut [T]

source§

### impl<T> Default for Option<T>

1.4.0 · source§

### impl<T> Default for [T; 0]

1.4.0 · source§

### impl<T> Default for [T; 1]where T: Default,

1.4.0 · source§

### impl<T> Default for [T; 2]where T: Default,

1.4.0 · source§

### impl<T> Default for [T; 3]where T: Default,

1.4.0 · source§

### impl<T> Default for [T; 4]where T: Default,

1.4.0 · source§

### impl<T> Default for [T; 5]where T: Default,

1.4.0 · source§

### impl<T> Default for [T; 6]where T: Default,

1.4.0 · source§

### impl<T> Default for [T; 7]where T: Default,

1.4.0 · source§

### impl<T> Default for [T; 8]where T: Default,

1.4.0 · source§

### impl<T> Default for [T; 9]where T: Default,

1.4.0 · source§

### impl<T> Default for [T; 10]where T: Default,

1.4.0 · source§

### impl<T> Default for [T; 11]where T: Default,

1.4.0 · source§

### impl<T> Default for [T; 12]where T: Default,

1.4.0 · source§

### impl<T> Default for [T; 13]where T: Default,

1.4.0 · source§

### impl<T> Default for [T; 14]where T: Default,

1.4.0 · source§

### impl<T> Default for [T; 15]where T: Default,

1.4.0 · source§

### impl<T> Default for [T; 16]where T: Default,

1.4.0 · source§

### impl<T> Default for [T; 17]where T: Default,

1.4.0 · source§

### impl<T> Default for [T; 18]where T: Default,

1.4.0 · source§

### impl<T> Default for [T; 19]where T: Default,

1.4.0 · source§

### impl<T> Default for [T; 20]where T: Default,

1.4.0 · source§

### impl<T> Default for [T; 21]where T: Default,

1.4.0 · source§

### impl<T> Default for [T; 22]where T: Default,

1.4.0 · source§

### impl<T> Default for [T; 23]where T: Default,

1.4.0 · source§

### impl<T> Default for [T; 24]where T: Default,

1.4.0 · source§

### impl<T> Default for [T; 25]where T: Default,

1.4.0 · source§

### impl<T> Default for [T; 26]where T: Default,

1.4.0 · source§

### impl<T> Default for [T; 27]where T: Default,

1.4.0 · source§

### impl<T> Default for [T; 28]where T: Default,

1.4.0 · source§

### impl<T> Default for [T; 29]where T: Default,

1.4.0 · source§

### impl<T> Default for [T; 30]where T: Default,

1.4.0 · source§

### impl<T> Default for [T; 31]where T: Default,

1.4.0 · source§

### impl<T> Default for [T; 32]where T: Default,

source§

### impl<T> Default for (T₁, T₂, …, Tₙ)where T: Default,

This trait is implemented for tuples up to twelve items long.

source§

### impl<T> Default for Vec<T>

source§

### impl<T> Default for Box<[T]>

source§

### impl<T> Default for Box<T>where T: Default,

source§

### impl<T> Default for Cell<T>where T: Default,

source§

### impl<T> Default for LazyCell<T>where T: Default,

1.70.0 · source§

### impl<T> Default for OnceCell<T>

source§

### impl<T> Default for RefCell<T>where T: Default,

source§

### impl<T> Default for SyncUnsafeCell<T>where T: Default,

1.10.0 · source§

### impl<T> Default for UnsafeCell<T>where T: Default,

1.19.0 · source§

### impl<T> Default for Reverse<T>where T: Default,

1.70.0 · source§

### impl<T> Default for std::collections::binary_heap::IntoIter<T>

1.70.0 · source§

### impl<T> Default for std::collections::btree_set::Iter<'_, T>

1.70.0 · source§

### impl<T> Default for std::collections::btree_set::Range<'_, T>

1.70.0 · source§

### impl<T> Default for std::collections::linked_list::IntoIter<T>

1.70.0 · source§

### impl<T> Default for std::collections::linked_list::Iter<'_, T>

1.70.0 · source§

### impl<T> Default for std::collections::linked_list::IterMut<'_, T>

source§

### impl<T> Default for BTreeSet<T>

source§

### impl<T> Default for BinaryHeap<T>where T: Ord,

source§

### impl<T> Default for LinkedList<T>

source§

### impl<T> Default for VecDeque<T>

1.2.0 · source§

### impl<T> Default for std::iter::Empty<T>

source§

### impl<T> Default for PhantomData<T>where T: ?Sized,

1.20.0 · source§

### impl<T> Default for ManuallyDrop<T>where T: Default + ?Sized,

1.74.0 · source§

### impl<T> Default for Saturating<T>where T: Default,

source§

### impl<T> Default for Wrapping<T>where T: Default,

1.62.0 · source§

### impl<T> Default for AssertUnwindSafe<T>where T: Default,

source§

### impl<T> Default for Rc<T>where T: Default,

1.10.0 · source§

### impl<T> Default for std::rc::Weak<T>

1.70.0 · source§

### impl<T> Default for std::slice::Iter<'_, T>

1.70.0 · source§

### impl<T> Default for std::slice::IterMut<'_, T>

source§

### impl<T> Default for AtomicPtr<T>

source§

### impl<T> Default for Arc<T>where T: Default,

source§

### impl<T> Default for Exclusive<T>where T: Default + ?Sized,

1.70.0 · source§

### impl<T> Default for OnceLock<T>

1.10.0 · source§

### impl<T> Default for std::sync::Weak<T>

1.70.0 · source§

### impl<T, A> Default for std::collections::btree_set::IntoIter<T, A>where A: Allocator + Default + Clone,

1.70.0 · source§

### impl<T, A> Default for std::vec::IntoIter<T, A>where A: Allocator + Default,

source§

### impl<T, S> Default for HashSet<T, S>where S: Default,

source§

### impl<T, const LANES: usize> Default for Mask<T, LANES>where T: MaskElement, LaneCount<LANES>: SupportedLaneCount,

source§

### impl<T, const N: usize> Default for Simd<T, N>where LaneCount<N>: SupportedLaneCount, T: SimdElement + Default,

source§

### impl<T: Default> Default for Cursor<T>

source§

### impl<T: Default> Default for LazyLock<T>

1.10.0 · source§

### impl<T: Default> Default for RwLock<T>

1.10.0 · source§

### impl<T: ?Sized + Default> Default for Mutex<T>