Trait Default

Source
pub trait Default: Sized {
    // Required method
    fn default() -> Self;
}
๐Ÿ”ฌThis is a nightly-only experimental API. (prelude_future)
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.9.0 ยท Sourceยง

impl Default for &OsStr

1.28.0 ยท Sourceยง

impl Default for &mut str

1.0.0 ยท Sourceยง

impl Default for AsciiChar

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

Sourceยง

impl Default for Decimal

Sourceยง

impl Default for DecimalSeq

Sourceยง

impl Default for Nanoseconds

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>

Sourceยง

impl Default for ByteString

1.10.0 ยท Sourceยง

impl Default for CString

1.9.0 ยท Sourceยง

impl Default for OsString

1.0.0 ยท Sourceยง

impl Default for Error

Sourceยง

impl Default for FormattingOptions

1.75.0 ยท Sourceยง

impl Default for FileTimes

1.13.0 ยท Sourceยง

impl Default for DefaultHasher

1.7.0 ยท Sourceยง

impl Default for RandomState

Sourceยง

impl Default for SipHasher13

1.0.0 ยท Sourceยง

impl Default for SipHasher

1.0.0 ยท Sourceยง

impl Default for rustc_std_workspace_std::io::Empty

1.0.0 ยท Sourceยง

impl Default for Sink

1.33.0 ยท Sourceยง

impl Default for PhantomPinned

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

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

Sourceยง

impl Default for DefaultRandomSource

1.80.0 ยท Sourceยง

impl Default for Rc<str>

1.80.0 ยท Sourceยง

impl Default for Rc<CStr>

1.0.0 ยท Sourceยง

impl Default for String

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.80.0 ยท Sourceยง

impl Default for Arc<str>

1.80.0 ยท Sourceยง

impl Default for Arc<CStr>

1.10.0 ยท Sourceยง

impl Default for Condvar

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, K, V> Default for rustc_std_workspace_std::collections::btree_map::Iter<'a, K, V>
where K: 'a, V: 'a,

1.70.0 ยท Sourceยง

impl<'a, K, V> Default for rustc_std_workspace_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.0.0 ยท Sourceยง

impl<A, Z, Y, X, W, V, U, T> Default for (A, Z, Y, X, W, V, U, T)
where A: Default, Z: Default, Y: Default, X: Default, W: Default, V: Default, U: Default, T: Default,

1.11.0 ยท Sourceยง

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

1.0.0 ยท Sourceยง

impl<B, A, Z, Y, X, W, V, U, T> Default for (B, A, Z, Y, X, W, V, U, T)
where B: Default, A: Default, Z: Default, Y: Default, X: Default, W: Default, V: Default, U: Default, T: Default,

1.0.0 ยท Sourceยง

impl<C, B, A, Z, Y, X, W, V, U, T> Default for (C, B, A, Z, Y, X, W, V, U, T)
where C: Default, B: Default, A: Default, Z: Default, Y: Default, X: Default, W: Default, V: Default, U: Default, T: Default,

1.0.0 ยท Sourceยง

impl<D, C, B, A, Z, Y, X, W, V, U, T> Default for (D, C, B, A, Z, Y, X, W, V, U, T)
where D: Default, C: Default, B: Default, A: Default, Z: Default, Y: Default, X: Default, W: Default, V: Default, U: Default, T: Default,

1.0.0 ยท Sourceยง

impl<E, D, C, B, A, Z, Y, X, W, V, U, T> Default for (E, D, C, B, A, Z, Y, X, W, V, U, T)
where E: Default, D: Default, C: Default, B: Default, A: Default, Z: Default, Y: Default, X: Default, W: Default, V: Default, U: Default, T: 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,

1.0.0 ยท Sourceยง

impl<Idx> Default for rustc_std_workspace_std::ops::Range<Idx>
where Idx: Default,

Sourceยง

impl<Idx> Default for rustc_std_workspace_std::range::Range<Idx>
where Idx: Default,

1.83.0 ยท Sourceยง

impl<K> Default for rustc_std_workspace_std::collections::hash_set::IntoIter<K>

1.83.0 ยท Sourceยง

impl<K> Default for rustc_std_workspace_std::collections::hash_set::Iter<'_, K>

1.70.0 ยท Sourceยง

impl<K, V> Default for rustc_std_workspace_std::collections::btree_map::Keys<'_, K, V>

1.70.0 ยท Sourceยง

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

1.82.0 ยท Sourceยง

impl<K, V> Default for RangeMut<'_, K, V>

1.70.0 ยท Sourceยง

impl<K, V> Default for rustc_std_workspace_std::collections::btree_map::Values<'_, K, V>

1.82.0 ยท Sourceยง

impl<K, V> Default for rustc_std_workspace_std::collections::btree_map::ValuesMut<'_, K, V>

1.83.0 ยท Sourceยง

impl<K, V> Default for rustc_std_workspace_std::collections::hash_map::IntoIter<K, V>

1.83.0 ยท Sourceยง

impl<K, V> Default for rustc_std_workspace_std::collections::hash_map::IntoKeys<K, V>

1.83.0 ยท Sourceยง

impl<K, V> Default for rustc_std_workspace_std::collections::hash_map::IntoValues<K, V>

1.83.0 ยท Sourceยง

impl<K, V> Default for rustc_std_workspace_std::collections::hash_map::Iter<'_, K, V>

1.83.0 ยท Sourceยง

impl<K, V> Default for rustc_std_workspace_std::collections::hash_map::IterMut<'_, K, V>

1.83.0 ยท Sourceยง

impl<K, V> Default for rustc_std_workspace_std::collections::hash_map::Keys<'_, K, V>

1.83.0 ยท Sourceยง

impl<K, V> Default for rustc_std_workspace_std::collections::hash_map::Values<'_, K, V>

1.83.0 ยท Sourceยง

impl<K, V> Default for rustc_std_workspace_std::collections::hash_map::ValuesMut<'_, K, V>

1.0.0 ยท Sourceยง

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

1.70.0 ยท Sourceยง

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

1.70.0 ยท Sourceยง

impl<K, V, A> Default for rustc_std_workspace_std::collections::btree_map::IntoKeys<K, V, A>
where A: Allocator + Default + Clone,

1.70.0 ยท Sourceยง

impl<K, V, A> Default for rustc_std_workspace_std::collections::btree_map::IntoValues<K, V, A>
where A: Allocator + Default + Clone,

1.0.0 ยท Sourceยง

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

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.88.0 ยท Sourceยง

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

1.88.0 ยท Sourceยง

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

1.0.0 ยท Sourceยง

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

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

1.0.0 ยท Sourceยง

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

1.0.0 ยท Sourceยง

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

1.0.0 ยท Sourceยง

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

1.80.0 ยท Sourceยง

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

1.70.0 ยท Sourceยง

impl<T> Default for OnceCell<T>

1.0.0 ยท 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 rustc_std_workspace_std::collections::binary_heap::IntoIter<T>

1.82.0 ยท Sourceยง

impl<T> Default for rustc_std_workspace_std::collections::binary_heap::Iter<'_, T>

1.70.0 ยท Sourceยง

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

1.70.0 ยท Sourceยง

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

1.70.0 ยท Sourceยง

impl<T> Default for rustc_std_workspace_std::collections::linked_list::IntoIter<T>

1.70.0 ยท Sourceยง

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

1.70.0 ยท Sourceยง

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

1.0.0 ยท Sourceยง

impl<T> Default for BTreeSet<T>

1.0.0 ยท Sourceยง

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

1.0.0 ยท Sourceยง

impl<T> Default for LinkedList<T>

1.0.0 ยท Sourceยง

impl<T> Default for VecDeque<T>

1.82.0 ยท Sourceยง

impl<T> Default for rustc_std_workspace_std::collections::vec_deque::Iter<'_, T>

1.82.0 ยท Sourceยง

impl<T> Default for rustc_std_workspace_std::collections::vec_deque::IterMut<'_, T>

1.0.0 ยท Sourceยง

impl<T> Default for Cursor<T>
where T: Default,

1.2.0 ยท Sourceยง

impl<T> Default for rustc_std_workspace_std::iter::Empty<T>

Sourceยง

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

Sourceยง

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

1.0.0 ยท Sourceยง

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

Sourceยง

impl<T> Default for PhantomInvariant<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,

1.0.0 ยท 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 UnsafePinned<T>
where T: Default,

1.80.0 ยท Sourceยง

impl<T> Default for Rc<[T]>

1.0.0 ยท Sourceยง

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

1.10.0 ยท Sourceยง

impl<T> Default for rustc_std_workspace_std::rc::Weak<T>

1.70.0 ยท Sourceยง

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

1.70.0 ยท Sourceยง

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

1.0.0 ยท Sourceยง

impl<T> Default for AtomicPtr<T>

1.80.0 ยท Sourceยง

impl<T> Default for Arc<[T]>

1.0.0 ยท Sourceยง

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

Sourceยง

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

1.80.0 ยท Sourceยง

impl<T> Default for LazyLock<T>
where T: Default,

1.10.0 ยท Sourceยง

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

1.70.0 ยท Sourceยง

impl<T> Default for OnceLock<T>

Sourceยง

impl<T> Default for ReentrantLock<T>
where T: Default,

1.10.0 ยท Sourceยง

impl<T> Default for RwLock<T>
where T: Default,

1.10.0 ยท Sourceยง

impl<T> Default for rustc_std_workspace_std::sync::Weak<T>

1.0.0 ยท Sourceยง

impl<T> Default for Vec<T>

1.70.0 ยท Sourceยง

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

1.70.0 ยท Sourceยง

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

1.0.0 ยท Sourceยง

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

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<U, T> Default for (U, T)
where U: Default, T: Default,

1.0.0 ยท Sourceยง

impl<V, U, T> Default for (V, U, T)
where V: Default, U: Default, T: Default,

1.0.0 ยท Sourceยง

impl<W, V, U, T> Default for (W, V, U, T)
where W: Default, V: Default, U: Default, T: Default,

1.0.0 ยท Sourceยง

impl<X, W, V, U, T> Default for (X, W, V, U, T)
where X: Default, W: Default, V: Default, U: Default, T: Default,

1.0.0 ยท Sourceยง

impl<Y, X, W, V, U, T> Default for (Y, X, W, V, U, T)
where Y: Default, X: Default, W: Default, V: Default, U: Default, T: Default,

1.0.0 ยท Sourceยง

impl<Z, Y, X, W, V, U, T> Default for (Z, Y, X, W, V, U, T)
where Z: Default, Y: Default, X: Default, W: Default, V: Default, U: Default, T: Default,