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 primitive 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 · Sourcefn default() -> Self
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§
impl Default for &str
impl Default for &CStr
impl Default for &OsStr
impl Default for &mut str
impl Default for PathArguments
impl Default for Item
impl Default for IntegerRadix
impl Default for AsciiChar
impl Default for bool
impl Default for char
impl Default for f16
impl Default for f32
impl Default for f64
impl Default for f128
impl Default for i8
impl Default for i16
impl Default for i32
impl Default for i64
impl Default for i128
impl Default for isize
impl Default for u8
impl Default for u16
impl Default for u32
impl Default for u64
impl Default for u128
impl Default for ()
impl Default for usize
impl Default for Eager
impl Default for Lazy
impl Default for InvalidBufferSize
impl Default for InvalidOutputSize
impl Default for DefaultHashBuilder
impl Default for BoundLifetimes
impl Default for Generics
impl Default for Array
impl Default for ArrayOfTables
impl Default for Document<&'static str>
impl Default for DocumentMut
impl Default for InlineTable
impl Default for RawString
impl Default for Decor
impl Default for Table
impl Default for Span
impl Default for B0
impl Default for B1
impl Default for Z0
impl Default for Equal
impl Default for Greater
impl Default for Less
impl Default for UTerm
impl Default for AdhocAttr
impl Default for TokenAccumulator
impl Default for Accum
impl Default for IsUsed
impl Default for Recognised
impl Default for ImportedDefinitions
impl Default for DdOptions
impl Default for UnprocessedOptions
impl Default for AngleBrackets
impl Default for RepeatAnalysisVisitor
impl Default for ExplicitErrorNamedArgs
impl Default for ErrorAccumulator
impl Default for SyntheticMacroModule
impl Default for SyntheticMacroTemplate
impl Default for Error
impl Default for FormattingOptions
impl Default for Global
impl Default for alloc::boxed::Box<str>
no_global_oom_handling only.impl Default for alloc::boxed::Box<CStr>
impl Default for alloc::boxed::Box<OsStr>
impl Default for ByteString
impl Default for CString
impl Default for Rc<str>
no_global_oom_handling only.impl Default for Rc<CStr>
no_global_oom_handling only.impl Default for String
impl Default for Arc<str>
no_global_oom_handling only.impl Default for Arc<CStr>
no_global_oom_handling only.impl Default for SipHasher
impl Default for PhantomPinned
impl Default for RangeFull
impl Default for AtomicBool
target_has_atomic_load_store=8 only.impl Default for AtomicI8
impl Default for AtomicI16
impl Default for AtomicI32
impl Default for AtomicI64
impl Default for AtomicIsize
impl Default for AtomicU8
impl Default for AtomicU16
impl Default for AtomicU32
impl Default for AtomicU64
impl Default for AtomicUsize
impl Default for Duration
impl Default for proc_macro::TokenStream
impl Default for System
impl Default for OsString
impl Default for FileTimes
impl Default for DefaultHasher
impl Default for RandomState
impl Default for std::io::util::Empty
impl Default for Sink
impl Default for PathBuf
impl Default for ExitCode
The default value is ExitCode::SUCCESS
impl Default for ExitStatus
The default value is one which indicates successful completion.
impl Default for DefaultRandomSource
impl Default for std::sync::nonpoison::condvar::Condvar
impl Default for std::sync::poison::condvar::Condvar
impl Default for Alignment
Returns Alignment::MIN, which is valid for any type.
impl Default for derive_deftly_macros::prelude::TokenStream
TokenStream::default() returns an empty stream,
i.e. this is equivalent with TokenStream::new().
impl Default for Abstract
impl Default for And
impl Default for AndAnd
impl Default for AndEq
impl Default for As
impl Default for Async
impl Default for At
impl Default for Auto
impl Default for Await
impl Default for Become
impl Default for derive_deftly_macros::prelude::token::Box
impl Default for Brace
impl Default for Bracket
impl Default for Break
impl Default for Caret
impl Default for CaretEq
impl Default for Colon
impl Default for Comma
impl Default for Const
impl Default for Continue
impl Default for Crate
impl Default for Default
impl Default for Do
impl Default for Dollar
impl Default for Dot
impl Default for DotDot
impl Default for DotDotDot
impl Default for DotDotEq
impl Default for Dyn
impl Default for Else
impl Default for Enum
impl Default for Eq
impl Default for EqEq
impl Default for Extern
impl Default for FatArrow
impl Default for Final
impl Default for Fn
impl Default for For
impl Default for Ge
impl Default for Group
impl Default for Gt
impl Default for If
impl Default for Impl
impl Default for In
impl Default for LArrow
impl Default for Le
impl Default for Let
impl Default for Loop
impl Default for Lt
impl Default for Macro
impl Default for Match
impl Default for Minus
impl Default for MinusEq
impl Default for Mod
impl Default for Move
impl Default for Mut
impl Default for Ne
impl Default for Not
impl Default for Or
impl Default for OrEq
impl Default for OrOr
impl Default for Override
impl Default for Paren
impl Default for PathSep
impl Default for Percent
impl Default for PercentEq
impl Default for Plus
impl Default for PlusEq
impl Default for Pound
impl Default for Priv
impl Default for Pub
impl Default for Question
impl Default for RArrow
impl Default for Raw
impl Default for Ref
impl Default for Return
impl Default for SelfType
impl Default for SelfValue
impl Default for Semi
impl Default for Shl
impl Default for ShlEq
impl Default for Shr
impl Default for ShrEq
impl Default for Slash
impl Default for SlashEq
impl Default for Star
impl Default for StarEq
impl Default for Static
impl Default for Struct
impl Default for Super
impl Default for Tilde
impl Default for Trait
impl Default for Try
impl Default for Type
impl Default for Typeof
impl Default for Underscore
impl Default for Union
impl Default for Unsafe
impl Default for Unsized
impl Default for Use
impl Default for Virtual
impl Default for Where
impl Default for While
impl Default for Yield
impl Default for Keccak224Core
impl Default for Keccak256Core
impl Default for Keccak256FullCore
impl Default for Keccak384Core
impl Default for Keccak512Core
impl Default for Sha3_224Core
impl Default for Sha3_256Core
impl Default for Sha3_384Core
impl Default for Sha3_512Core
impl Default for Shake128Core
impl Default for Shake256Core
impl<'a> Default for &'a BStr
impl<'a> Default for &'a Bytes
impl<'a> Default for &'a ByteStr
impl<'a> Default for &'a mut ByteStr
impl<'a> Default for PhantomContravariantLifetime<'a>
impl<'a> Default for PhantomCovariantLifetime<'a>
impl<'a> Default for PhantomInvariantLifetime<'a>
impl<'a, K, V> Default for alloc::collections::btree::map::Iter<'a, K, V>where
K: 'a,
V: 'a,
impl<'a, K, V> Default for alloc::collections::btree::map::IterMut<'a, K, V>where
K: 'a,
V: 'a,
impl<'c> Default for Definitions<'c>
impl<'c> Default for DefinitionsContext<'c>
impl<A, B> Default for Chain<A, B>
impl<B> Default for Cow<'_, B>
impl<BlockSize, Kind> Default for BlockBuffer<BlockSize, Kind>
impl<C> Default for ContextError<C>
impl<H> Default for BuildHasherDefault<H>
impl<I> Default for LocatingSlice<I>where
I: Default,
impl<I> Default for Partial<I>where
I: Default + StreamIsPartial,
impl<I> Default for Cloned<I>where
I: Default,
impl<I> Default for Copied<I>where
I: Default,
impl<I> Default for Enumerate<I>where
I: Default,
impl<I> Default for Flatten<I>
impl<I> Default for Fuse<I>where
I: Default,
impl<I> Default for Rev<I>where
I: Default,
impl<I, S> Default for Stateful<I, S>
impl<Idx> Default for core::ops::range::Range<Idx>where
Idx: Default,
impl<Idx> Default for core::range::Range<Idx>where
Idx: Default,
impl<K> Default for hashbrown::set::Iter<'_, K>
impl<K> Default for std::collections::hash::set::IntoIter<K>
impl<K> Default for std::collections::hash::set::Iter<'_, K>
impl<K, A> Default for hashbrown::set::IntoIter<K, A>where
A: Allocator,
impl<K, V> Default for &indexmap::map::slice::Slice<K, V>
impl<K, V> Default for &mut indexmap::map::slice::Slice<K, V>
impl<K, V> Default for hashbrown::map::Iter<'_, K, V>
impl<K, V> Default for hashbrown::map::IterMut<'_, K, V>
impl<K, V> Default for hashbrown::map::Keys<'_, K, V>
impl<K, V> Default for hashbrown::map::Values<'_, K, V>
impl<K, V> Default for hashbrown::map::ValuesMut<'_, K, V>
impl<K, V> Default for indexmap::map::iter::IntoIter<K, V>
impl<K, V> Default for indexmap::map::iter::IntoKeys<K, V>
impl<K, V> Default for indexmap::map::iter::IntoValues<K, V>
impl<K, V> Default for indexmap::map::iter::Iter<'_, K, V>
impl<K, V> Default for IterMut2<'_, K, V>
impl<K, V> Default for indexmap::map::iter::IterMut<'_, K, V>
impl<K, V> Default for indexmap::map::iter::Keys<'_, K, V>
impl<K, V> Default for indexmap::map::iter::Values<'_, K, V>
impl<K, V> Default for indexmap::map::iter::ValuesMut<'_, K, V>
impl<K, V> Default for alloc::boxed::Box<Slice<K, V>>
impl<K, V> Default for BTreeMap<K, V>
impl<K, V> Default for alloc::collections::btree::map::Keys<'_, K, V>
impl<K, V> Default for alloc::collections::btree::map::Range<'_, K, V>
impl<K, V> Default for RangeMut<'_, K, V>
impl<K, V> Default for alloc::collections::btree::map::Values<'_, K, V>
impl<K, V> Default for alloc::collections::btree::map::ValuesMut<'_, K, V>
impl<K, V> Default for std::collections::hash::map::IntoIter<K, V>
impl<K, V> Default for std::collections::hash::map::IntoKeys<K, V>
impl<K, V> Default for std::collections::hash::map::IntoValues<K, V>
impl<K, V> Default for std::collections::hash::map::Iter<'_, K, V>
impl<K, V> Default for std::collections::hash::map::IterMut<'_, K, V>
impl<K, V> Default for std::collections::hash::map::Keys<'_, K, V>
impl<K, V> Default for std::collections::hash::map::Values<'_, K, V>
impl<K, V> Default for std::collections::hash::map::ValuesMut<'_, K, V>
impl<K, V, A> Default for hashbrown::map::IntoIter<K, V, A>where
A: Allocator,
impl<K, V, A> Default for hashbrown::map::IntoKeys<K, V, A>where
A: Allocator,
impl<K, V, A> Default for hashbrown::map::IntoValues<K, V, A>where
A: Allocator,
impl<K, V, A> Default for alloc::collections::btree::map::IntoIter<K, V, A>
impl<K, V, A> Default for alloc::collections::btree::map::IntoKeys<K, V, A>
impl<K, V, A> Default for alloc::collections::btree::map::IntoValues<K, V, A>
impl<K, V, S> Default for IndexMap<K, V, S>where
S: Default,
impl<K, V, S> Default for std::collections::hash::map::HashMap<K, V, S>where
S: Default,
impl<K, V, S, A> Default for hashbrown::map::HashMap<K, V, S, A>
impl<M: Default> Default for UsageInfo<M>
impl<O: Default + SubstParseContext> Default for Template<O>
impl<T> Default for &[T]
impl<T> Default for &indexmap::set::slice::Slice<T>
impl<T> Default for &mut [T]
impl<T> Default for Option<T>
impl<T> Default for [T; 0]
impl<T> Default for [T; 1]where
T: Default,
impl<T> Default for [T; 2]where
T: Default,
impl<T> Default for [T; 3]where
T: Default,
impl<T> Default for [T; 4]where
T: Default,
impl<T> Default for [T; 5]where
T: Default,
impl<T> Default for [T; 6]where
T: Default,
impl<T> Default for [T; 7]where
T: Default,
impl<T> Default for [T; 8]where
T: Default,
impl<T> Default for [T; 9]where
T: Default,
impl<T> Default for [T; 10]where
T: Default,
impl<T> Default for [T; 11]where
T: Default,
impl<T> Default for [T; 12]where
T: Default,
impl<T> Default for [T; 13]where
T: Default,
impl<T> Default for [T; 14]where
T: Default,
impl<T> Default for [T; 15]where
T: Default,
impl<T> Default for [T; 16]where
T: Default,
impl<T> Default for [T; 17]where
T: Default,
impl<T> Default for [T; 18]where
T: Default,
impl<T> Default for [T; 19]where
T: Default,
impl<T> Default for [T; 20]where
T: Default,
impl<T> Default for [T; 21]where
T: Default,
impl<T> Default for [T; 22]where
T: Default,
impl<T> Default for [T; 23]where
T: Default,
impl<T> Default for [T; 24]where
T: Default,
impl<T> Default for [T; 25]where
T: Default,
impl<T> Default for [T; 26]where
T: Default,
impl<T> Default for [T; 27]where
T: Default,
impl<T> Default for [T; 28]where
T: Default,
impl<T> Default for [T; 29]where
T: Default,
impl<T> Default for [T; 30]where
T: Default,
impl<T> Default for [T; 31]where
T: Default,
impl<T> Default for [T; 32]where
T: Default,
impl<T> Default for *const T
impl<T> Default for *mut T
impl<T> Default for (T₁, T₂, …, Tₙ)where
T: Default,
This trait is implemented for tuples up to twelve items long.
impl<T> Default for CoreWrapper<T>where
T: Default + BufferKindUser,
<T as BlockSizeUser>::BlockSize: IsLess<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B0>, B0>, B0>, B0>, B0>, B0>> + Default,
<<T as BlockSizeUser>::BlockSize as IsLess<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B0>, B0>, B0>, B0>, B0>, B0>>>::Output: NonZero,
<T as BufferKindUser>::BufferKind: Default,
impl<T> Default for XofReaderCoreWrapper<T>where
T: Default + XofReaderCore,
<T as BlockSizeUser>::BlockSize: IsLess<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B0>, B0>, B0>, B0>, B0>, B0>> + Default,
<<T as BlockSizeUser>::BlockSize as IsLess<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UInt<UTerm, B1>, B0>, B0>, B0>, B0>, B0>, B0>, B0>, B0>>>::Output: NonZero,
impl<T> Default for hashbrown::table::Iter<'_, T>
impl<T> Default for IterBuckets<'_, T>
impl<T> Default for IterHash<'_, T>
impl<T> Default for IterHashBuckets<'_, T>
impl<T> Default for IterHashMut<'_, T>
impl<T> Default for hashbrown::table::IterMut<'_, T>
impl<T> Default for indexmap::set::iter::IntoIter<T>
impl<T> Default for indexmap::set::iter::Iter<'_, T>
impl<T> Default for TokenSlice<'_, T>
impl<T> Default for Reverse<T>where
T: Default,
impl<T> Default for alloc::boxed::Box<[T]>
no_global_oom_handling only.impl<T> Default for alloc::boxed::Box<Slice<T>>
impl<T> Default for alloc::boxed::Box<T>where
T: Default,
no_global_oom_handling only.impl<T> Default for BinaryHeap<T>where
T: Ord,
impl<T> Default for alloc::collections::binary_heap::IntoIter<T>
impl<T> Default for alloc::collections::binary_heap::Iter<'_, T>
impl<T> Default for alloc::collections::btree::set::Iter<'_, T>
impl<T> Default for alloc::collections::btree::set::Range<'_, T>
impl<T> Default for alloc::collections::linked_list::IntoIter<T>
impl<T> Default for alloc::collections::linked_list::Iter<'_, T>
impl<T> Default for alloc::collections::linked_list::IterMut<'_, T>
impl<T> Default for LinkedList<T>
impl<T> Default for alloc::collections::vec_deque::iter::Iter<'_, T>
impl<T> Default for alloc::collections::vec_deque::iter_mut::IterMut<'_, T>
impl<T> Default for Rc<[T]>
no_global_oom_handling only.impl<T> Default for Rc<T>where
T: Default,
no_global_oom_handling only.impl<T> Default for alloc::rc::Weak<T>
impl<T> Default for Arc<[T]>
no_global_oom_handling only.impl<T> Default for Arc<T>where
T: Default,
no_global_oom_handling only.impl<T> Default for alloc::sync::Weak<T>
impl<T> Default for Vec<T>
impl<T> Default for LazyCell<T>where
T: Default,
impl<T> Default for OnceCell<T>
impl<T> Default for RefCell<T>where
T: Default,
impl<T> Default for SyncUnsafeCell<T>where
T: Default,
impl<T> Default for UnsafeCell<T>where
T: Default,
impl<T> Default for PhantomContravariant<T>where
T: ?Sized,
impl<T> Default for PhantomCovariant<T>where
T: ?Sized,
impl<T> Default for PhantomInvariant<T>where
T: ?Sized,
impl<T> Default for Saturating<T>where
T: Default,
impl<T> Default for Wrapping<T>where
T: Default,
impl<T> Default for AssertUnwindSafe<T>where
T: Default,
impl<T> Default for Pin<Box<T>>
no_global_oom_handling only.impl<T> Default for Pin<Rc<T>>
no_global_oom_handling only.impl<T> Default for Pin<Arc<T>>
no_global_oom_handling only.impl<T> Default for UnsafePinned<T>where
T: Default,
impl<T> Default for core::slice::iter::Iter<'_, T>
impl<T> Default for core::slice::iter::IterMut<'_, T>
impl<T> Default for AtomicPtr<T>
target_has_atomic_load_store=ptr only.