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 &CStr
impl Default for &OsStr
impl Default for &mut str
impl Default for BuildPattern
impl Default for DateTime
impl Default for AsciiChar
impl Default for DependencyKind
impl Default for Edition
impl Default for ArtifactDebuginfo
impl Default for RemoteRedirect
impl Default for LocaleFallbackPriority
impl Default for PrefilterConfig
impl Default for serde_json::value::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 MonthRepr
Creates a modifier that indicates the value uses the
Numerical
representation.
impl Default for Padding
Creates a modifier that indicates the value is padded with zeroes.
impl Default for SubsecondDigits
Creates a modifier that indicates the stringified value contains one or more digits.
impl Default for UnixTimestampPrecision
Creates a modifier that indicates the value represents the number of seconds since the Unix epoch.
impl Default for WeekNumberRepr
Creates a modifier that indicates that the value uses the Iso
representation.
impl Default for WeekdayRepr
Creates a modifier that indicates the value uses the Long
representation.
impl Default for YearRepr
Creates a modifier that indicates the value uses the Full
representation.
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 Error
impl Default for FormattingOptions
impl Default for Git
impl Default for Project
impl Default for SystemEnv
impl Default for Box<str>
impl Default for Box<CStr>
impl Default for Box<OsStr>
impl Default for String
impl Default for Global
impl Default for ByteString
impl Default for CString
impl Default for Rc<str>
impl Default for Rc<CStr>
impl Default for Arc<str>
impl Default for Arc<CStr>
impl Default for 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 core::time::Duration
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 Default for Utf8PathBuf
impl Default for MetadataCommand
impl Default for BlameOptions
impl Default for Buf
impl Default for TreeUpdateBuilder
impl Default for DescribeFormatOptions
impl Default for DescribeOptions
impl Default for DiffFindOptions
impl Default for DiffOptions
impl Default for EmailCreateOptions
impl Default for MergeOptions
impl Default for StatusOptions
impl Default for AttrCheckFlags
impl Default for CredentialType
impl Default for IndexAddOption
impl Default for PathspecFlags
impl Default for ReferenceFormat
impl Default for StashApplyFlags
impl Default for StashFlags
impl Default for CodePointInversionListBuilder
impl Default for Other
impl Default for Private
impl Default for Extensions
impl Default for Fields
impl Default for Transform
impl Default for icu_locid::extensions::transform::value::Value
impl Default for Attributes
impl Default for Keywords
impl Default for Unicode
impl Default for icu_locid::extensions::unicode::value::Value
impl Default for LanguageIdentifier
impl Default for Locale
impl Default for Language
impl Default for Variants
impl Default for LocaleCanonicalizer
impl Default for LocaleDirectionality
impl Default for LocaleExpander
impl Default for CanonicalCombiningClassMap
impl Default for CanonicalComposition
impl Default for CanonicalDecomposition
impl Default for Uts46Mapper
impl Default for AlnumV1Marker
impl Default for AlphabeticV1Marker
impl Default for AsciiHexDigitV1Marker
impl Default for BasicEmojiV1Marker
impl Default for BidiClassNameToValueV1Marker
impl Default for BidiClassV1Marker
impl Default for BidiClassValueToLongNameV1Marker
impl Default for BidiClassValueToShortNameV1Marker
impl Default for BidiControlV1Marker
impl Default for BidiMirroredV1Marker
impl Default for BlankV1Marker
impl Default for CanonicalCombiningClassNameToValueV1Marker
impl Default for CanonicalCombiningClassV1Marker
impl Default for CanonicalCombiningClassValueToLongNameV1Marker
impl Default for CanonicalCombiningClassValueToShortNameV1Marker
impl Default for CaseIgnorableV1Marker
impl Default for CaseSensitiveV1Marker
impl Default for CasedV1Marker
impl Default for ChangesWhenCasefoldedV1Marker
impl Default for ChangesWhenCasemappedV1Marker
impl Default for ChangesWhenLowercasedV1Marker
impl Default for ChangesWhenNfkcCasefoldedV1Marker
impl Default for ChangesWhenTitlecasedV1Marker
impl Default for ChangesWhenUppercasedV1Marker
impl Default for DashV1Marker
impl Default for DefaultIgnorableCodePointV1Marker
impl Default for DeprecatedV1Marker
impl Default for DiacriticV1Marker
impl Default for EastAsianWidthNameToValueV1Marker
impl Default for EastAsianWidthV1Marker
impl Default for EastAsianWidthValueToLongNameV1Marker
impl Default for EastAsianWidthValueToShortNameV1Marker
impl Default for EmojiComponentV1Marker
impl Default for EmojiModifierBaseV1Marker
impl Default for EmojiModifierV1Marker
impl Default for EmojiPresentationV1Marker
impl Default for EmojiV1Marker
impl Default for ExemplarCharactersAuxiliaryV1Marker
impl Default for ExemplarCharactersIndexV1Marker
impl Default for ExemplarCharactersMainV1Marker
impl Default for ExemplarCharactersNumbersV1Marker
impl Default for ExemplarCharactersPunctuationV1Marker
impl Default for ExtendedPictographicV1Marker
impl Default for ExtenderV1Marker
impl Default for FullCompositionExclusionV1Marker
impl Default for GeneralCategoryNameToValueV1Marker
impl Default for GeneralCategoryV1Marker
impl Default for GeneralCategoryValueToLongNameV1Marker
impl Default for GeneralCategoryValueToShortNameV1Marker
impl Default for GraphV1Marker
impl Default for GraphemeBaseV1Marker
impl Default for GraphemeClusterBreakNameToValueV1Marker
impl Default for GraphemeClusterBreakV1Marker
impl Default for GraphemeClusterBreakValueToLongNameV1Marker
impl Default for GraphemeClusterBreakValueToShortNameV1Marker
impl Default for GraphemeExtendV1Marker
impl Default for GraphemeLinkV1Marker
impl Default for HangulSyllableTypeNameToValueV1Marker
impl Default for HangulSyllableTypeV1Marker
impl Default for HangulSyllableTypeValueToLongNameV1Marker
impl Default for HangulSyllableTypeValueToShortNameV1Marker
impl Default for HexDigitV1Marker
impl Default for HyphenV1Marker
impl Default for IdContinueV1Marker
impl Default for IdStartV1Marker
impl Default for IdeographicV1Marker
impl Default for IdsBinaryOperatorV1Marker
impl Default for IdsTrinaryOperatorV1Marker
impl Default for IndicSyllabicCategoryNameToValueV1Marker
impl Default for IndicSyllabicCategoryV1Marker
impl Default for IndicSyllabicCategoryValueToLongNameV1Marker
impl Default for IndicSyllabicCategoryValueToShortNameV1Marker
impl Default for JoinControlV1Marker
impl Default for JoiningTypeNameToValueV1Marker
impl Default for JoiningTypeV1Marker
impl Default for JoiningTypeValueToLongNameV1Marker
impl Default for JoiningTypeValueToShortNameV1Marker
impl Default for LineBreakNameToValueV1Marker
impl Default for LineBreakV1Marker
impl Default for LineBreakValueToLongNameV1Marker
impl Default for LineBreakValueToShortNameV1Marker
impl Default for LogicalOrderExceptionV1Marker
impl Default for LowercaseV1Marker
impl Default for MathV1Marker
impl Default for NfcInertV1Marker
impl Default for NfdInertV1Marker
impl Default for NfkcInertV1Marker
impl Default for NfkdInertV1Marker
impl Default for NoncharacterCodePointV1Marker
impl Default for PatternSyntaxV1Marker
impl Default for PatternWhiteSpaceV1Marker
impl Default for PrependedConcatenationMarkV1Marker
impl Default for PrintV1Marker
impl Default for QuotationMarkV1Marker
impl Default for RadicalV1Marker
impl Default for RegionalIndicatorV1Marker
impl Default for ScriptNameToValueV1Marker
impl Default for ScriptV1Marker
impl Default for ScriptValueToLongNameV1Marker
impl Default for ScriptValueToShortNameV1Marker
impl Default for SegmentStarterV1Marker
impl Default for SentenceBreakNameToValueV1Marker
impl Default for SentenceBreakV1Marker
impl Default for SentenceBreakValueToLongNameV1Marker
impl Default for SentenceBreakValueToShortNameV1Marker
impl Default for SentenceTerminalV1Marker
impl Default for SoftDottedV1Marker
impl Default for TerminalPunctuationV1Marker
impl Default for UnifiedIdeographV1Marker
impl Default for UppercaseV1Marker
impl Default for VariationSelectorV1Marker
impl Default for WhiteSpaceV1Marker
impl Default for WordBreakNameToValueV1Marker
impl Default for WordBreakV1Marker
impl Default for WordBreakValueToLongNameV1Marker
impl Default for WordBreakValueToShortNameV1Marker
impl Default for XdigitV1Marker
impl Default for XidContinueV1Marker
impl Default for XidStartV1Marker
impl Default for LocaleFallbackConfig
impl Default for HelloWorldProvider
impl Default for HelloWorldV1<'_>
impl Default for DataKeyMetadata
impl Default for DataLocale
impl Default for DataRequestMetadata
impl Default for DataResponseMetadata
impl Default for Config
The defaults are that of beStrict=false in the WHATWG URL Standard
impl Default for Idna
impl Default for Errors
impl Default for Uts46
impl Default for Adapter
impl Default for itoa::Buffer
impl Default for git_indexer_progress
impl Default for FinderBuilder
impl Default for FormatterOptions
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 Map<String, Value>
impl Default for time::duration::Duration
impl Default for Day
Creates a modifier that indicates the value is padded with zeroes.
impl Default for End
Creates a modifier used to represent the end of input.
impl Default for Hour
Creates a modifier that indicates the value is padded with zeroes and has the 24-hour representation.
impl Default for Minute
Creates a modifier that indicates the value is padded with zeroes.
impl Default for Month
Creates an instance of this type that indicates the value uses the
Numerical
representation, is padded with zeroes,
and is case-sensitive when parsing.
impl Default for OffsetHour
Creates a modifier that indicates the value only uses a sign for negative values and is padded with zeroes.
impl Default for OffsetMinute
Creates a modifier that indicates the value is padded with zeroes.
impl Default for OffsetSecond
Creates a modifier that indicates the value is padded with zeroes.
impl Default for Ordinal
Creates a modifier that indicates the value is padded with zeroes.
impl Default for Period
Creates a modifier that indicates the value uses the upper-case representation and is case-sensitive when parsing.
impl Default for Second
Creates a modifier that indicates the value is padded with zeroes.
impl Default for Subsecond
Creates a modifier that indicates the stringified value contains one or more digits.
impl Default for UnixTimestamp
Creates a modifier that indicates the value represents the number of seconds since the Unix epoch. The sign is not mandatory.
impl Default for WeekNumber
Creates a modifier that indicates that the value is padded with zeroes
and uses the Iso
representation.
impl Default for Weekday
Creates a modifier that indicates the value uses the Long
representation and is case-sensitive when parsing. If the representation is changed to a
numerical one, the instance defaults to one-based indexing.
impl Default for Year
Creates a modifier that indicates the value uses the Full
representation, is padded with zeroes, uses the Gregorian calendar as its
base, and only includes the year’s sign if necessary.
impl Default for Parsed
impl Default for FoundDateTimeList
impl<'a> Default for &'a ByteStr
impl<'a> Default for &'a DataLocale
impl<'a> Default for &'a mut ByteStr
impl<'a> Default for FlexZeroVec<'a>
impl<'a> Default for PhantomContravariantLifetime<'a>
impl<'a> Default for PhantomCovariantLifetime<'a>
impl<'a> Default for PhantomInvariantLifetime<'a>
impl<'a> Default for ProxyOptions<'a>
impl<'a> Default for RemoteCallbacks<'a>
impl<'a> Default for DataRequest<'a>
impl<'a> Default for MetadataBuilder<'a>
impl<'a> Default for RecordBuilder<'a>
impl<'a> Default for PrettyFormatter<'a>
impl<'a, K0, K1, V> Default for ZeroMap2dBorrowed<'a, K0, K1, V>
impl<'a, K0, K1, V> Default for ZeroMap2d<'a, K0, K1, V>
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, K, V> Default for ZeroMapBorrowed<'a, K, V>
impl<'a, K, V> Default for ZeroMap<'a, K, V>
impl<'a, T> Default for ZeroVec<'a, T>where
T: AsULE,
impl<'cb> Default for CheckoutBuilder<'cb>
impl<'cb> Default for RepoBuilder<'cb>
impl<'cb> Default for RebaseOptions<'cb>
impl<'cb> Default for FetchOptions<'cb>
impl<'cb> Default for PushOptions<'cb>
impl<'cb> Default for StashApplyOptions<'cb>
impl<'cb> Default for SubmoduleUpdateOptions<'cb>
impl<'data> Default for AliasesV1<'data>
impl<'data> Default for AliasesV2<'data>
impl<'data> Default for LocaleFallbackParentsV1<'data>
impl<'data> Default for LocaleFallbackSupplementV1<'data>
impl<A> Default for SmallVec<A>where
A: Array,
impl<A, B> Default for Chain<A, B>
impl<B> Default for Cow<'_, B>
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 core::ops::range::Range<Idx>where
Idx: Default,
impl<Idx> Default for 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<K, V, S> Default for LiteMap<K, V, S>
impl<M> Default for DataPayload<M>
impl<T> Default for &[T]
impl<T> Default for &ZeroSlice<T>where
T: AsULE,
impl<T> Default for &mut [T]
impl<T> Default for Option<T>
impl<T> Default for VarZeroVec<'_, 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.