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 EulerRot
impl Default for AsciiChar
impl Default for BigEndian
impl Default for LittleEndian
impl Default for Sample
impl Default for Repeat
impl Default for CompressionType
impl Default for image::codecs::png::FilterType
impl Default for DynamicImage
impl Default for PrefilterConfig
impl Default for png::common::Compression
impl Default for AdaptiveFilterType
impl Default for png::filter::FilterType
impl Default for Channels
impl Default for ColorSpace
impl Default for ChromaSamplePosition
impl Default for ColorPrimaries
impl Default for MatrixCoefficients
impl Default for PixelRange
impl Default for TransferCharacteristics
impl Default for CpuFeatureLevel
impl Default for Tune
impl Default for FrameTypeOverride
impl Default for PredictionMode
impl Default for ravif::av1encoder::BitDepth
impl Default for DeflateLevel
impl Default for Compressor
impl Default for ChromaSampling
impl Default for zune_core::bit_depth::BitDepth
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 Affine2
impl Default for Affine3A
impl Default for BVec2
impl Default for BVec3
impl Default for BVec3A
impl Default for BVec4
impl Default for BVec4A
impl Default for DAffine2
impl Default for DAffine3
impl Default for DMat2
impl Default for DMat3
impl Default for DMat4
impl Default for DQuat
impl Default for DVec2
impl Default for DVec3
impl Default for DVec4
impl Default for FontConfig
impl Default for FontGlyphRanges
impl Default for I16Vec2
impl Default for I16Vec3
impl Default for I16Vec4
impl Default for I64Vec2
impl Default for I64Vec3
impl Default for I64Vec4
impl Default for IVec2
impl Default for IVec3
impl Default for IVec4
impl Default for Id
impl Default for ImColor32
impl Default for ImString
impl Default for Mat2
impl Default for Mat3
impl Default for Mat3A
impl Default for Mat4
impl Default for Model
impl Default for OwnedDrawData
impl Default for Quat
impl Default for RussimpNodeData
impl Default for SkeletalVertex
impl Default for U16Vec2
impl Default for U16Vec3
impl Default for U16Vec4
impl Default for U64Vec2
impl Default for U64Vec3
impl Default for U64Vec4
impl Default for UVec2
impl Default for UVec3
impl Default for UVec4
impl Default for chaos_framework::Vec2
impl Default for Vec3
impl Default for Vec3A
impl Default for Vec4
impl Default for ImColor
impl Default for ImDrawChannel
impl Default for ImDrawCmd
impl Default for ImDrawCmdHeader
impl Default for ImDrawData
impl Default for ImDrawList
impl Default for ImDrawListSplitter
impl Default for ImDrawVert
impl Default for ImFont
impl Default for ImFontAtlas
impl Default for ImFontAtlasCustomRect
impl Default for ImFontConfig
impl Default for ImFontGlyph
impl Default for ImFontGlyphRangesBuilder
impl Default for ImGuiIO
impl Default for ImGuiInputTextCallbackData
impl Default for ImGuiKeyData
impl Default for ImGuiListClipper
impl Default for ImGuiOnceUponAFrame
impl Default for ImGuiPayload
impl Default for ImGuiPlatformImeData
impl Default for ImGuiSizeCallbackData
impl Default for ImGuiStorage
impl Default for ImGuiStoragePair
impl Default for ImGuiStyle
impl Default for ImGuiTableColumnSortSpecs
impl Default for ImGuiTableSortSpecs
impl Default for ImGuiTextBuffer
impl Default for ImGuiTextFilter
impl Default for ImGuiTextRange
impl Default for ImGuiViewport
impl Default for ImVec2
impl Default for ImVec4
impl Default for ImVector_ImDrawChannel
impl Default for ImVector_ImDrawCmd
impl Default for ImVector_ImDrawIdx
impl Default for ImVector_ImDrawVert
impl Default for ImVector_ImFontAtlasCustomRect
impl Default for ImVector_ImFontConfig
impl Default for ImVector_ImFontGlyph
impl Default for ImVector_ImFontPtr
impl Default for ImVector_ImGuiStoragePair
impl Default for ImVector_ImGuiTextRange
impl Default for ImVector_ImTextureID
impl Default for ImVector_ImU32
impl Default for ImVector_ImVec2
impl Default for ImVector_ImVec4
impl Default for ImVector_ImWchar
impl Default for ImVector_char
impl Default for ImVector_float
impl Default for Error
impl Default for FormattingOptions
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 Duration
impl Default for Global
impl Default for Box<str>
impl Default for Box<CStr>
impl Default for Box<OsStr>
impl Default for ByteString
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 std::hash::random::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::poison::condvar::Condvar
impl Default for AHasher
Provides a default Hasher with fixed keys. This is typically used in conjunction with BuildHasherDefault to create AHashers in order to hash the keys of the map.
Generally it is preferable to use RandomState instead, so that different hashmaps will have different keys. However if fixed keys are desirable this may be used instead.
§Example
use std::hash::BuildHasherDefault;
use ahash::{AHasher, RandomState};
use std::collections::HashMap;
let mut map: HashMap<i32, i32, BuildHasherDefault<AHasher>> = HashMap::default();
map.insert(12, 34);
impl Default for ahash::random_state::RandomState
Creates an instance of RandomState using keys obtained from the random number generator. Each instance created in this way will have a unique set of keys. (But the resulting instance can be used to create many hashers each or which will have the same keys.)
This is the same as RandomState::new()
NOTE: For safety this trait impl is only available available if either of the flags runtime-rng
(on by default) or
compile-time-rng
are enabled. This is to prevent weakly keyed maps from being accidentally created. Instead one of
constructors for RandomState must be used.
impl Default for anyhow::Chain<'_>
impl Default for Hasher
impl Default for Collector
impl Default for Backoff
impl Default for Parker
impl Default for WaitGroup
impl Default for NoneMore
impl Default for Encoding
impl Default for ValidationOptions
impl Default for IntegerBounds
impl Default for Text
impl Default for TimeCode
impl Default for LayerAttributes
impl Default for Decompressor
impl Default for Crc
impl Default for GzBuilder
impl Default for GzHeader
impl Default for flate2::Compression
impl Default for gif::common::Frame<'_>
impl Default for gif::reader::DecodeOptions
impl Default for bf16
impl Default for f16
impl Default for EncoderParams
impl Default for image_webp::vp8::Frame
impl Default for PixelDensity
impl Default for LimitSupport
impl Default for image::image_reader::Limits
impl Default for MetadataBuilder<'_>
impl Default for RecordBuilder<'_>
impl Default for FinderBuilder
impl Default for CompressorOxide
impl Default for DecompressorOxide
impl Default for InflateState
impl Default for BigInt
impl Default for BigUint
impl Default for OnceBool
impl Default for OnceNonZeroUsize
impl Default for parking_lot::condvar::Condvar
impl Default for Once
impl Default for UnparkResult
impl Default for SpinWait
impl Default for FrameControl
impl Default for Info<'_>
impl Default for Transformations
Instantiate the default transformations, the identity transform.
impl Default for png::decoder::stream::DecodeOptions
impl Default for StreamingDecoder
impl Default for png::decoder::Limits
impl Default for Header
impl Default for ThreadRng
impl Default for OsRng
impl Default for EncoderConfig
Default preset for EncoderConfig
: it is a balance between quality and
speed. See with_speed_preset()
.
impl Default for RateControlConfig
impl Default for SpeedSettings
impl Default for Config
impl Default for T35
impl Default for FrameParameters
impl Default for RCSummary
impl Default for EncoderStats
impl Default for Configuration
impl Default for ThreadPoolBuilder
impl Default for Adler32
impl Default for tiff::decoder::Limits
impl Default for Deflate
impl Default for Lzw
impl Default for Packbits
impl Default for Uncompressed
impl Default for LoadOptions
impl Default for Material
impl Default for Mesh
impl Default for PlaneOffset
impl Default for DecoderOptions
impl Default for EncoderOptions
impl Default for DeflateOptions
impl Default for ImageInfo
impl Default for ImGuiStoragePair__bindgen_ty_1
impl Default for vec128_storage
impl Default for vec256_storage
impl Default for vec512_storage
impl<'a> Default for &'a ImStr
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<'a, T> Default for OnceRef<'a, T>
impl<A> Default for SmallVec<A>where
A: Array,
impl<A, B> Default for chaos_framework::__core::iter::Chain<A, B>
impl<B> Default for Cow<'_, B>
impl<E, N> Default for BitQueue<E, N>
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 chaos_framework::__core::ops::Range<Idx>where
Idx: Default,
impl<Idx> Default for chaos_framework::__core::range::Range<Idx>where
Idx: Default,
impl<Inner, Value> Default for Recursive<Inner, Value>
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> Default for AHashMap<K, V>
NOTE: For safety this trait impl is only available if either of the flags runtime-rng
(on by default) or
compile-time-rng
are enabled. This is to prevent weakly keyed maps from being accidentally created. Instead one of
constructors for RandomState must be used.
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<N, E> Default for BitCounter<N, E>
impl<N, E> Default for BitRecorder<N, E>
impl<O> Default for F32<O>
impl<O> Default for F64<O>
impl<O> Default for I16<O>
impl<O> Default for I32<O>
impl<O> Default for I64<O>
impl<O> Default for I128<O>
impl<O> Default for Isize<O>
impl<O> Default for U16<O>
impl<O> Default for U32<O>
impl<O> Default for U64<O>
impl<O> Default for U128<O>
impl<O> Default for Usize<O>
impl<P, Container> Default for ImageBuffer<P, Container>
impl<R, G, T> Default for ReentrantMutex<R, G, T>
impl<R, T> Default for lock_api::mutex::Mutex<R, T>
impl<R, T> Default for lock_api::rwlock::RwLock<R, T>
impl<Storage> Default for __BindgenBitfieldUnit<Storage>where
Storage: 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 *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 Textures<T>
We manually impl Default as #[derive(Default)]
incorrectly requires T: Default
which is
not necessary at all.
impl<T> Default for Cell<T>where
T: Default,
impl<T> Default for LazyCell<T>where
T: Default,
impl<T> Default for chaos_framework::__core::cell::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 Reverse<T>where
T: Default,
impl<T> Default for chaos_framework::__core::iter::Empty<T>
impl<T> Default for PhantomContravariant<T>where
T: ?Sized,
impl<T> Default for PhantomCovariant<T>where
T: ?Sized,
impl<T> Default for PhantomData<T>where
T: ?Sized,
impl<T> Default for PhantomInvariant<T>where
T: ?Sized,
impl<T> Default for ManuallyDrop<T>
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 UnsafePinned<T>where
T: Default,
impl<T> Default for chaos_framework::__core::slice::Iter<'_, T>
impl<T> Default for chaos_framework::__core::slice::IterMut<'_, T>
impl<T> Default for AtomicPtr<T>
impl<T> Default for Exclusive<T>
impl<T> Default for Box<[T]>
impl<T> Default for Box<T>where
T: Default,
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 BTreeSet<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 VecDeque<T>
impl<T> Default for Rc<[T]>
impl<T> Default for Rc<T>where
T: Default,
impl<T> Default for alloc::rc::Weak<T>
impl<T> Default for Arc<[T]>
impl<T> Default for Arc<T>where
T: Default,
impl<T> Default for alloc::sync::Weak<T>
impl<T> Default for Vec<T>
impl<T> Default for Cursor<T>where
T: Default,
impl<T> Default for LazyLock<T>where
T: Default,
impl<T> Default for OnceLock<T>
impl<T> Default for std::sync::poison::mutex::Mutex<T>
impl<T> Default for std::sync::poison::rwlock::RwLock<T>where
T: Default,
impl<T> Default for ReentrantLock<T>where
T: Default,
impl<T> Default for AHashSet<T>
NOTE: For safety this trait impl is only available available if either of the flags runtime-rng
(on by default) or
compile-time-rng
are enabled. This is to prevent weakly keyed maps from being accidentally created. Instead one of
constructors for RandomState must be used.