Trait Default

1.6.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 structs that define a set of options:

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

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();
}

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() };
}

ยงDerivable

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

ยงenums

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,
}

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

The #[default] attribute was stabilized in Rust 1.62.0.

ยง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 }
}

ยงExamples

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

Required Methodsยง

1.0.0 ยท 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();

Making your own:

enum Kind {
    A,
    B,
    C,
}

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

Dyn Compatibilityยง

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementorsยง

1.0.0 ยท Sourceยง

impl Default for &str

1.10.0 ยท Sourceยง

impl Default for &CStr

1.28.0 ยท Sourceยง

impl Default for &mut str

1.0.0 ยท Sourceยง

impl Default for Char

1.0.0 ยท Sourceยง

impl Default for bool

1.0.0 ยท Sourceยง

impl Default for char

1.0.0 ยท Sourceยง

impl Default for f16

1.0.0 ยท Sourceยง

impl Default for f32

1.0.0 ยท Sourceยง

impl Default for f64

1.0.0 ยท Sourceยง

impl Default for f128

1.0.0 ยท Sourceยง

impl Default for i8

1.0.0 ยท Sourceยง

impl Default for i16

1.0.0 ยท Sourceยง

impl Default for i32

1.0.0 ยท Sourceยง

impl Default for i64

1.0.0 ยท Sourceยง

impl Default for i128

1.0.0 ยท Sourceยง

impl Default for isize

1.0.0 ยท Sourceยง

impl Default for u8

1.0.0 ยท Sourceยง

impl Default for u16

1.0.0 ยท Sourceยง

impl Default for u32

1.0.0 ยท Sourceยง

impl Default for u64

1.0.0 ยท Sourceยง

impl Default for u128

1.0.0 ยท Sourceยง

impl Default for ()

1.0.0 ยท Sourceยง

impl Default for usize

1.0.0 ยท Sourceยง

impl Default for Error

Sourceยง

impl Default for FormattingOptions

1.0.0 ยท Sourceยง

impl Default for SipHasher

1.33.0 ยท Sourceยง

impl Default for PhantomPinned

1.0.0 ยท Sourceยง

impl Default for RangeFull

Sourceยง

impl Default for Alignment

Returns Alignment::MIN, which is valid for any type.

1.0.0 ยท 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

1.0.0 ยท 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

1.0.0 ยท Sourceยง

impl Default for AtomicUsize

1.3.0 ยท Sourceยง

impl Default for Duration

Sourceยง

impl<'a> Default for &'a ByteStr

Sourceยง

impl<'a> Default for &'a mut ByteStr

Sourceยง

impl<'a> Default for PhantomContravariantLifetime<'a>

Sourceยง

impl<'a> Default for PhantomCovariantLifetime<'a>

Sourceยง

impl<'a> Default for PhantomInvariantLifetime<'a>

1.70.0 ยท Sourceยง

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

1.7.0 ยท Sourceยง

impl<H> Default for BuildHasherDefault<H>

1.70.0 ยท Sourceยง

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

1.70.0 ยท Sourceยง

impl<I: Default> Default for Cloned<I>

1.70.0 ยท Sourceยง

impl<I: Default> Default for Copied<I>

1.70.0 ยท Sourceยง

impl<I: Default> Default for Enumerate<I>

1.70.0 ยท Sourceยง

impl<I: Default> Default for Fuse<I>

1.70.0 ยท Sourceยง

impl<I: Default> Default for Rev<I>

1.0.0 ยท Sourceยง

impl<Idx: Default> Default for core::ops::Range<Idx>

Sourceยง

impl<Idx: Default> Default for core::range::Range<Idx>

1.0.0 ยท Sourceยง

impl<T> Default for &[T]

1.5.0 ยท Sourceยง

impl<T> Default for &mut [T]

1.0.0 ยท 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,

1.70.0 ยท Sourceยง

impl<T> Default for OnceCell<T>

1.2.0 ยท Sourceยง

impl<T> Default for Empty<T>

Sourceยง

impl<T> Default for PhantomContravariant<T>
where T: ?Sized,

Sourceยง

impl<T> Default for PhantomCovariant<T>
where T: ?Sized,

Sourceยง

impl<T> Default for PhantomInvariant<T>
where T: ?Sized,

1.70.0 ยท Sourceยง

impl<T> Default for Iter<'_, T>

1.70.0 ยท Sourceยง

impl<T> Default for IterMut<'_, T>

1.0.0 ยท Sourceยง

impl<T> Default for AtomicPtr<T>

1.89.0 ยท Sourceยง

impl<T, const N: usize> Default for IntoIter<T, N>

Sourceยง

impl<T, const N: usize> Default for Mask<T, N>

Sourceยง

impl<T, const N: usize> Default for Simd<T, N>

1.0.0 ยท Sourceยง

impl<T: PointeeSized> Default for PhantomData<T>

1.20.0 ยท Sourceยง

impl<T: Default + ?Sized> Default for ManuallyDrop<T>

Sourceยง

impl<T: Default + ?Sized> Default for Exclusive<T>

1.0.0 ยท Sourceยง

impl<T: Default> Default for (Tโ‚, Tโ‚‚, โ€ฆ, Tโ‚™)

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

1.0.0 ยท Sourceยง

impl<T: Default> Default for Cell<T>

1.80.0 ยท Sourceยง

impl<T: Default> Default for LazyCell<T>

1.0.0 ยท Sourceยง

impl<T: Default> Default for RefCell<T>

Sourceยง

impl<T: Default> Default for SyncUnsafeCell<T>

1.10.0 ยท Sourceยง

impl<T: Default> Default for UnsafeCell<T>

1.19.0 ยท Sourceยง

impl<T: Default> Default for Reverse<T>

1.74.0 ยท Sourceยง

impl<T: Default> Default for Saturating<T>

1.0.0 ยท Sourceยง

impl<T: Default> Default for Wrapping<T>

1.62.0 ยท Sourceยง

impl<T: Default> Default for AssertUnwindSafe<T>

Sourceยง

impl<T: Default> Default for UnsafePinned<T>

1.88.0 ยท Sourceยง

impl<T: ?Sized + Thin> Default for *const T

1.88.0 ยท Sourceยง

impl<T: ?Sized + Thin> Default for *mut T