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 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 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 &serde_json::value::Value
impl Default for &str
impl Default for &CStr
impl Default for &OsStr
impl Default for &mut str
impl Default for AsciiChar
impl Default for SWFlags
impl Default for TEFlags
impl Default for TagMode
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 DiagnosticLevel
impl Default for FootprintMode
impl Default for FuelConsumptionMode
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 Env
impl Default for SymbolStr
impl Default for Val
impl Default for ContractCostParams
impl Default for DataValue
impl Default for DiagnosticEvents
impl Default for EncryptedBody
impl Default for LedgerEntryChanges
impl Default for PeerStatList
impl Default for ProofLevel
impl Default for ScBytes
impl Default for ScMap
impl Default for ScString
impl Default for ScSymbol
impl Default for ScVec
impl Default for Signature
impl Default for String32
impl Default for String64
impl Default for TimeSlicedPeerDataList
impl Default for TxAdvertVector
impl Default for TxDemandVector
impl Default for UpgradeType
impl Default for loam_sdk::soroban_sdk::xdr::Value
impl Default for AuthSnapshot
impl Default for EnvTestConfig
impl Default for EventsSnapshot
impl Default for Generators
impl Default for LedgerInfo
impl Default for Snapshot
impl Default for Global
impl Default for System
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 OsString
impl Default for loam_sdk::soroban_sdk::testutils::arbitrary::std::fmt::Error
impl Default for FormattingOptions
impl Default for FileTimes
impl Default for DefaultHasher
impl Default for RandomState
impl Default for SipHasher
impl Default for loam_sdk::soroban_sdk::testutils::arbitrary::std::io::Empty
impl Default for Sink
impl Default for PhantomPinned
impl Default for RangeFull
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 Alignment
Returns Alignment::MIN
, which is valid for any type.
impl Default for DefaultRandomSource
impl Default for Rc<str>
impl Default for Rc<CStr>
impl Default for String
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 loam_sdk::soroban_sdk::testutils::arbitrary::std::sync::nonpoison::Condvar
impl Default for Arc<str>
impl Default for Arc<CStr>
impl Default for loam_sdk::soroban_sdk::testutils::arbitrary::std::sync::Condvar
impl Default for Duration
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 ark_bls12_381::curves::g1::Config
impl Default for ark_bls12_381::curves::g2::Config
impl Default for SparseTerm
impl Default for EmptyFlags
impl Default for Eager
impl Default for block_buffer::Lazy
impl Default for Limb
impl Default for Reciprocal
impl Default for CompressedEdwardsY
impl Default for EdwardsPoint
impl Default for MontgomeryPoint
impl Default for CompressedRistretto
impl Default for RistrettoPoint
impl Default for curve25519_dalek::scalar::Scalar
impl Default for Specification
impl Default for Length
impl Default for MacError
impl Default for InvalidBufferSize
impl Default for InvalidOutputSize
impl Default for VerifyingKey
impl Default for I256
impl Default for U256
impl Default for DefaultHashBuilder
impl Default for itoa::Buffer
impl Default for k256::arithmetic::affine::AffinePoint
impl Default for k256::arithmetic::projective::ProjectivePoint
impl Default for k256::arithmetic::scalar::Scalar
impl Default for Secp256k1
impl Default for FinderBuilder
impl Default for num_bigint::bigint::BigInt
impl Default for BigUint
impl Default for OnceBool
impl Default for OnceNonZeroUsize
impl Default for p256::arithmetic::scalar::Scalar
impl Default for NistP256
impl Default for vec256_storage
impl Default for vec512_storage
impl Default for ThreadRng
impl Default for OsRng
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 CompactFormatter
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 Default for signature::error::Error
impl Default for AuthorizationManager
impl Default for MeteredCostComponent
impl Default for ScaledU64
impl Default for Budget
impl Default for CostTracker
impl Default for LedgerEntryChange
impl Default for Events
impl Default for FeeConfiguration
impl Default for RentFeeConfiguration
impl Default for WriteFeeConfiguration
impl Default for FeeEstimate
impl Default for InvocationResources
impl Default for Host
impl Default for Footprint
impl Default for Storage
impl Default for ModuleCache
impl Default for LedgerSnapshot
impl Default for soroban_wasmi::engine::config::Config
impl Default for FuelCosts
impl Default for StackLimits
impl Default for Engine
impl Default for ExternRef
impl Default for FuncRef
impl Default for StoreLimits
impl Default for StoreLimitsBuilder
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 Pages
impl Default for UntypedValue
impl Default for wasmparser_nostd::parser::Parser
impl Default for wasmparser_nostd::validator::func::FuncValidatorAllocations
impl Default for wasmparser_nostd::validator::Validator
impl Default for wasmparser_nostd::validator::WasmFeatures
impl Default for wasmparser::parser::Parser
impl Default for wasmparser::validator::func::FuncValidatorAllocations
impl Default for wasmparser::validator::Validator
impl Default for wasmparser::validator::WasmFeatures
impl Default for vec128_storage
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> Default for PrettyFormatter<'a>
impl<'a, K, V> Default for loam_sdk::soroban_sdk::testutils::arbitrary::std::collections::btree_map::Iter<'a, K, V>where
K: 'a,
V: 'a,
impl<'a, K, V> Default for loam_sdk::soroban_sdk::testutils::arbitrary::std::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> Default for MeteredVector<A>
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 ScalarPrimitive<C>
impl<C> Default for primeorder::affine::AffinePoint<C>where
C: PrimeCurveParams,
impl<C> Default for primeorder::projective::ProjectivePoint<C>where
C: PrimeCurveParams,
impl<F> Default for DenseMultilinearExtension<F>
impl<F> Default for SparseMultilinearExtension<F>
impl<F> Default for DensePolynomial<F>
impl<F> Default for ark_poly::polynomial::univariate::sparse::SparsePolynomial<F>
impl<F, T> Default for ark_poly::polynomial::multivariate::sparse::SparsePolynomial<F, T>
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 loam_sdk::soroban_sdk::testutils::arbitrary::std::ops::Range<Idx>where
Idx: Default,
impl<Idx> Default for loam_sdk::soroban_sdk::testutils::arbitrary::std::range::Range<Idx>where
Idx: Default,
impl<Idx, T> Default for ComponentVec<Idx, T>
impl<Idx, T> Default for DedupArena<Idx, T>
impl<Idx, T> Default for Arena<Idx, T>
impl<K> Default for loam_sdk::soroban_sdk::testutils::arbitrary::std::collections::hash_set::IntoIter<K>
impl<K> Default for loam_sdk::soroban_sdk::testutils::arbitrary::std::collections::hash_set::Iter<'_, K>
impl<K> Default for hashbrown::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 Box<Slice<K, V>>
impl<K, V> Default for loam_sdk::soroban_sdk::testutils::arbitrary::std::collections::btree_map::Keys<'_, K, V>
impl<K, V> Default for loam_sdk::soroban_sdk::testutils::arbitrary::std::collections::btree_map::Range<'_, K, V>
impl<K, V> Default for RangeMut<'_, K, V>
impl<K, V> Default for loam_sdk::soroban_sdk::testutils::arbitrary::std::collections::btree_map::Values<'_, K, V>
impl<K, V> Default for loam_sdk::soroban_sdk::testutils::arbitrary::std::collections::btree_map::ValuesMut<'_, K, V>
impl<K, V> Default for loam_sdk::soroban_sdk::testutils::arbitrary::std::collections::hash_map::IntoIter<K, V>
impl<K, V> Default for loam_sdk::soroban_sdk::testutils::arbitrary::std::collections::hash_map::IntoKeys<K, V>
impl<K, V> Default for loam_sdk::soroban_sdk::testutils::arbitrary::std::collections::hash_map::IntoValues<K, V>
impl<K, V> Default for loam_sdk::soroban_sdk::testutils::arbitrary::std::collections::hash_map::Iter<'_, K, V>
impl<K, V> Default for loam_sdk::soroban_sdk::testutils::arbitrary::std::collections::hash_map::IterMut<'_, K, V>
impl<K, V> Default for loam_sdk::soroban_sdk::testutils::arbitrary::std::collections::hash_map::Keys<'_, K, V>
impl<K, V> Default for loam_sdk::soroban_sdk::testutils::arbitrary::std::collections::hash_map::Values<'_, K, V>
impl<K, V> Default for loam_sdk::soroban_sdk::testutils::arbitrary::std::collections::hash_map::ValuesMut<'_, K, V>
impl<K, V> Default for BTreeMap<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_nostd::map::IndexMap<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, A> Default for loam_sdk::soroban_sdk::testutils::arbitrary::std::collections::btree_map::IntoIter<K, V, A>
impl<K, V, A> Default for loam_sdk::soroban_sdk::testutils::arbitrary::std::collections::btree_map::IntoKeys<K, V, A>
impl<K, V, A> Default for loam_sdk::soroban_sdk::testutils::arbitrary::std::collections::btree_map::IntoValues<K, V, A>
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, Ctx> Default for MeteredOrdMap<K, V, Ctx>where
Ctx: Default,
impl<K, V, S> Default for loam_sdk::soroban_sdk::testutils::arbitrary::std::collections::HashMap<K, V, S>where
S: Default,
impl<K, V, S> Default for indexmap::map::IndexMap<K, V, S>where
S: Default,
impl<K, V, S, A> Default for hashbrown::map::HashMap<K, V, S, A>
impl<K, V, S, A> Default for hashbrown::map::HashMap<K, V, S, A>
impl<K, V, W> Default for InstanceMap<K, V, W>
impl<K, V, W> Default for PersistentMap<K, V, W>
impl<K, V, W> Default for TemporaryMap<K, V, W>
impl<MOD, const LIMBS: usize> Default for Residue<MOD, LIMBS>where
MOD: ResidueParams<LIMBS>,
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> Default for ark_ec::models::bls12::g1::G1Prepared<P>where
P: Bls12Config,
impl<P> Default for ark_ec::models::bls12::g2::G2Prepared<P>where
P: Bls12Config,
impl<P> Default for ark_ec::models::bn::g1::G1Prepared<P>where
P: BnConfig,
impl<P> Default for ark_ec::models::bn::g2::G2Prepared<P>where
P: BnConfig,
impl<P> Default for ark_ec::models::bw6::g1::G1Prepared<P>where
P: BW6Config,
impl<P> Default for ark_ec::models::bw6::g2::G2Prepared<P>where
P: BW6Config,
impl<P> Default for ark_ec::models::mnt4::g1::G1Prepared<P>where
P: MNT4Config,
impl<P> Default for ark_ec::models::mnt4::g2::G2Prepared<P>where
P: MNT4Config,
impl<P> Default for ark_ec::models::mnt6::g1::G1Prepared<P>where
P: MNT6Config,
impl<P> Default for ark_ec::models::mnt6::g2::G2Prepared<P>where
P: MNT6Config,
impl<P> Default for ark_ec::models::short_weierstrass::affine::Affine<P>where
P: SWCurveConfig,
impl<P> Default for ark_ec::models::short_weierstrass::group::Projective<P>where
P: SWCurveConfig,
impl<P> Default for ark_ec::models::twisted_edwards::affine::Affine<P>where
P: TECurveConfig,
impl<P> Default for ark_ec::models::twisted_edwards::group::Projective<P>where
P: TECurveConfig,
impl<P> Default for PairingOutput<P>where
P: Pairing,
impl<P> Default for CubicExtField<P>where
P: CubicExtConfig,
impl<P> Default for QuadExtField<P>where
P: QuadExtConfig,
impl<P, const N: usize> Default for Fp<P, N>where
P: FpConfig<N>,
impl<Size> Default for EncodedPoint<Size>
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.