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,
}
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 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,
}
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 &StyledStr
impl Default for &Styles
impl Default for &CStr
impl Default for &std::ffi::os_str::OsStr
impl Default for &mut str
impl Default for Action
impl Default for State
impl Default for DependencyKind
impl Default for Edition
impl Default for ValueHint
impl Default for clap_builder::util::color::ColorChoice
impl Default for colorchoice::ColorChoice
impl Default for Container
impl Default for PrefilterConfig
impl Default for StrCtx
impl Default for Endian
impl Default for Value
The default value is Value::Null
.
This is useful for handling omitted Value
fields when deserializing.
§Examples
use serde_json::Value;
#[derive(Deserialize)]
struct Settings {
level: i32,
#[serde(default)]
extras: Value,
}
let data = r#" { "level": 42 } "#;
let s: Settings = serde_json::from_str(data)?;
assert_eq!(s.level, 42);
assert_eq!(s.extras, Value::Null);
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 StripBytes
impl Default for StripStr
impl Default for WinconBytes
impl Default for Effects
impl Default for Reset
impl Default for Style
impl Default for Params
impl Default for AsciiParser
impl Default for Utf8Parser
impl Default for Utf8PathBuf
impl Default for MetadataCommand
impl Default for Arg
impl Default for ArgGroup
impl Default for Command
impl Default for clap_builder::builder::os_str::OsStr
impl Default for PossibleValue
impl Default for ValueRange
impl Default for Str
impl Default for StyledStr
impl Default for Styles
impl Default for BoolValueParser
impl Default for BoolishValueParser
impl Default for FalseyValueParser
impl Default for NonEmptyStringValueParser
impl Default for OsStringValueParser
impl Default for PathBufValueParser
impl Default for StringValueParser
impl Default for ArgMatches
impl Default for Indices<'_>
Creates an empty iterator.
impl Default for RawValues<'_>
Creates an empty iterator.
impl Default for Id
impl Default for RawArgs
impl Default for MatchOptions
impl Default for Pattern
impl Default for Ctx
impl Default for goblin::elf::compression_header::compression_header32::CompressionHeader
impl Default for goblin::elf::compression_header::compression_header64::CompressionHeader
impl Default for goblin::elf::compression_header::CompressionHeader
impl Default for goblin::elf::dynamic::dyn32::Dyn
impl Default for goblin::elf::dynamic::dyn32::DynamicInfo
impl Default for goblin::elf::dynamic::dyn64::Dyn
impl Default for goblin::elf::dynamic::dyn64::DynamicInfo
impl Default for goblin::elf::dynamic::Dyn
impl Default for goblin::elf::dynamic::DynamicInfo
impl Default for goblin::elf::header::header32::Header
impl Default for goblin::elf::header::header64::Header
impl Default for goblin::elf::program_header::program_header32::ProgramHeader
impl Default for goblin::elf::program_header::program_header64::ProgramHeader
impl Default for goblin::elf::program_header::ProgramHeader
impl Default for goblin::elf::reloc::reloc32::Rel
impl Default for goblin::elf::reloc::reloc32::Rela
impl Default for goblin::elf::reloc::reloc64::Rel
impl Default for goblin::elf::reloc::reloc64::Rela
impl Default for Reloc
impl Default for goblin::elf::section_header::section_header32::SectionHeader
impl Default for goblin::elf::section_header::section_header64::SectionHeader
impl Default for goblin::elf::section_header::SectionHeader
impl Default for goblin::elf::sym::Sym
impl Default for goblin::elf::sym::sym32::Sym
impl Default for goblin::elf::sym::sym64::Sym
impl Default for FatArch
impl Default for FatHeader
impl Default for Header32
impl Default for Header64
impl Default for goblin::mach::header::Header
impl Default for DyldInfoCommand
impl Default for DysymtabCommand
impl Default for LinkeditDataCommand
impl Default for SymtabCommand
impl Default for Section
impl Default for SymbolsCtx
impl Default for DataDirectories
impl Default for DataDirectory
impl Default for ImageDebugDirectory
impl Default for RuntimeFunction
impl Default for ExportDirectoryTable
impl Default for CoffHeader
impl Default for DosHeader
impl Default for goblin::pe::header::Header
impl Default for StandardFields32
impl Default for StandardFields64
impl Default for StandardFields
impl Default for WindowsFields32
impl Default for WindowsFields64
impl Default for Relocation
impl Default for SectionTable
impl Default for AuxBeginAndEndFunction
impl Default for AuxFunctionDefinition
impl Default for AuxSectionDefinition
impl Default for AuxWeakExternal
impl Default for goblin::pe::symbol::Symbol
impl Default for HintData
impl Default for itoa::Buffer
impl Default for FinderBuilder
impl Default for ryu::buffer::Buffer
impl Default for BuildMetadata
impl Default for Prerelease
impl Default for VersionReq
The default VersionReq is the same as VersionReq::STAR
.
impl Default for IgnoredAny
impl Default for serde_json::map::Map<String, Value>
impl Default for Hash128
impl Default for siphasher::sip128::SipHasher13
impl Default for siphasher::sip128::SipHasher24
impl Default for siphasher::sip128::SipHasher
impl Default for siphasher::sip::SipHasher13
impl Default for siphasher::sip::SipHasher24
impl Default for siphasher::sip::SipHasher
impl Default for toml::map::Map<String, Value>
impl Default for TemplateExpression
impl Default for uniffi_bindgen::bindings::kotlin::gen_kotlin::Config
impl Default for uniffi_bindgen::bindings::kotlin::gen_kotlin::CustomTypeConfig
impl Default for uniffi_bindgen::bindings::python::gen_python::Config
impl Default for uniffi_bindgen::bindings::python::gen_python::CustomTypeConfig
impl Default for PythonCodeOracle
impl Default for uniffi_bindgen::bindings::ruby::gen_ruby::Config
impl Default for uniffi_bindgen::bindings::Config
impl Default for RunScriptOptions
impl Default for uniffi_bindgen::bindings::swift::gen_swift::Config
impl Default for uniffi_bindgen::bindings::swift::gen_swift::CustomTypeConfig
impl Default for Variant
impl Default for FfiFunction
impl Default for ComponentInterface
impl Default for uniffi_bindgen::Config
impl Default for NamespaceMetadata
impl Default for utf8parse::Parser
impl Default for EmptyArrayLit
impl Default for EmptyDictionaryLit
impl Default for Any
impl Default for ArrayBuffer
impl Default for ArrayBufferView
impl Default for Assign
impl Default for Async
impl Default for Attribute
impl Default for Boolean
impl Default for BufferSource
impl Default for Byte
impl Default for ByteString
impl Default for Callback
impl Default for CloseBrace
impl Default for CloseBracket
impl Default for CloseParen
impl Default for Colon
impl Default for Comma
impl Default for Const
impl Default for Constructor
impl Default for DOMString
impl Default for DataView
impl Default for Deleter
impl Default for Dictionary
impl Default for Dot
impl Default for Double
impl Default for Ellipsis
impl Default for Enum
impl Default for weedle::term::Error
impl Default for False
impl Default for Float32Array
impl Default for Float64Array
impl Default for Float
impl Default for FrozenArray
impl Default for Getter
impl Default for GreaterThan
impl Default for Implements
impl Default for Includes
impl Default for Infinity
impl Default for Inherit
impl Default for Int8Array
impl Default for Int16Array
impl Default for Int32Array
impl Default for Interface
impl Default for Iterable
impl Default for LegacyCaller
impl Default for LessThan
impl Default for Long
impl Default for Maplike
impl Default for Minus
impl Default for Mixin
impl Default for NaN
impl Default for Namespace
impl Default for NegInfinity
impl Default for Null
impl Default for Object
impl Default for Octet
impl Default for OpenBrace
impl Default for OpenBracket
impl Default for OpenParen
impl Default for Optional
impl Default for Or
impl Default for Partial
impl Default for Promise
impl Default for QMark
impl Default for ReadOnly
impl Default for Record
impl Default for Required
impl Default for SemiColon
impl Default for Sequence
impl Default for Setlike
impl Default for Setter
impl Default for Short
impl Default for Static
impl Default for Stringifier
impl Default for weedle::term::Symbol
impl Default for True
impl Default for Typedef
impl Default for USVString
impl Default for Uint8Array
impl Default for Uint8ClampedArray
impl Default for Uint16Array
impl Default for Uint32Array
impl Default for Undefined
impl Default for Unrestricted
impl Default for Unsigned
impl Default for RustBuffer
impl Default for RustCallStatus
impl Default for uniffi::deps::anyhow::Chain<'_>
impl Default for Bytes
impl Default for BytesMut
impl Default for OnceBool
impl Default for OnceNonZeroUsize
impl Default for uniffi::deps::static_assertions::_core::fmt::Error
impl Default for FormattingOptions
impl Default for uniffi::deps::static_assertions::_core::hash::SipHasher
impl Default for PhantomPinned
impl Default for RangeFull
impl Default for Alignment
Returns Alignment::MIN
, which is valid for any type.
impl Default for AtomicBool
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 Global
impl Default for Box<str>
impl Default for Box<CStr>
impl Default for Box<OsStr>
impl Default for CString
impl Default for Rc<str>
impl Default for Rc<CStr>
impl Default for String
impl Default for Arc<str>
impl Default for Arc<CStr>
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 Condvar
impl<'a> Default for Index<'a>
impl<'a> Default for RelocSection<'a>
impl<'a> Default for Symtab<'a>
impl<'a> Default for Segments<'a>
impl<'a> Default for goblin::mach::symbols::SymbolIterator<'a>
impl<'a> Default for CodeviewPDB70DebugInfo<'a>
impl<'a> Default for DebugData<'a>
impl<'a> Default for Export<'a>
impl<'a> Default for ExportData<'a>
impl<'a> Default for Relocations<'a>
impl<'a> Default for goblin::pe::symbol::SymbolIterator<'a>
impl<'a> Default for Strtab<'a>
impl<'a> Default for PrettyFormatter<'a>
impl<'a> Default for StringifierMember<'a>
impl<'a> Default for MetadataBuilder<'a>
impl<'a> Default for RecordBuilder<'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<'a, T> Default for ValuesRef<'a, T>where
T: 'a,
Creates an empty iterator.
impl<'a, T> Default for OnceRef<'a, T>
impl<'s> Default for StrippedBytes<'s>
impl<'s> Default for StrippedStr<'s>
impl<A, B> Default for uniffi::deps::static_assertions::_core::iter::Chain<A, B>
impl<B> Default for Cow<'_, B>
impl<C> Default for anstyle_parse::Parser<C>where
C: Default,
impl<E> Default for EnumValueParser<E>
impl<H> Default for BuildHasherDefault<H>
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<Idx> Default for uniffi::deps::static_assertions::_core::ops::Range<Idx>where
Idx: Default,
impl<Idx> Default for uniffi::deps::static_assertions::_core::range::Range<Idx>where
Idx: Default,
impl<K> Default for std::collections::hash::set::IntoIter<K>
impl<K> Default for std::collections::hash::set::Iter<'_, K>
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 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 HashMap<K, V, S>where
S: Default,
impl<T> Default for &[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 (T₁, T₂, …, Tₙ)where
T: Default,
This trait is implemented for tuples up to twelve items long.
impl<T> Default for RangedI64ValueParser<T>
impl<T> Default for RangedU64ValueParser<T>
impl<T> Default for clap_builder::parser::matches::arg_matches::Values<T>
Creates an empty iterator.