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 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 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.

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§

source

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 }
}

Implementors§

const: unstable · source§

impl Default for &str

1.10.0 · source§

impl Default for &CStr

1.9.0 · source§

impl Default for &OsStr

1.28.0 · source§

impl Default for &mut str

const: unstable · source§

impl Default for bool

const: unstable · source§

impl Default for char

const: unstable · source§

impl Default for f32

const: unstable · source§

impl Default for f64

const: unstable · source§

impl Default for i8

const: unstable · source§

impl Default for i16

const: unstable · source§

impl Default for i32

const: unstable · source§

impl Default for i64

const: unstable · source§

impl Default for i128

const: unstable · source§

impl Default for isize

const: unstable · source§

impl Default for u8

const: unstable · source§

impl Default for u16

const: unstable · source§

impl Default for u32

const: unstable · source§

impl Default for u64

const: unstable · source§

impl Default for u128

const: unstable · source§

impl Default for ()

const: unstable · source§

impl Default for usize

source§

impl Default for Error

source§

impl Default for kvarn_async::prelude::io::Empty

source§

impl Default for Sink

§

impl Default for Bytes

§

impl Default for BytesMut

§

impl Default for CompactString

1.3.0 · source§

impl Default for Duration

source§

impl Default for Method

1.17.0 · source§

impl Default for PathBuf

source§

impl Default for StatusCode

source§

impl Default for Uri

Returns a Uri representing /

source§

impl Default for Version

source§

impl Default for WriteableBytes

source§

impl Default for kvarn_async::prelude::uri::Builder

source§

impl Default for Parts

source§

impl Default for SipHasher

1.33.0 · source§

impl Default for PhantomPinned

source§

impl Default for RangeFull

const: unstable · source§

impl Default for AtomicBool

1.34.0 (const: unstable) · source§

impl Default for AtomicI8

1.34.0 (const: unstable) · source§

impl Default for AtomicI16

1.34.0 (const: unstable) · source§

impl Default for AtomicI32

1.34.0 (const: unstable) · source§

impl Default for AtomicI64

const: unstable · source§

impl Default for AtomicIsize

1.34.0 (const: unstable) · source§

impl Default for AtomicU8

1.34.0 (const: unstable) · source§

impl Default for AtomicU16

1.34.0 (const: unstable) · source§

impl Default for AtomicU32

1.34.0 (const: unstable) · source§

impl Default for AtomicU64

const: unstable · source§

impl Default for AtomicUsize

source§

impl Default for Global

1.17.0 (const: unstable) · source§

impl Default for Box<str, Global>

1.17.0 · source§

impl Default for Box<CStr, Global>

1.17.0 · source§

impl Default for Box<OsStr, Global>

1.10.0 · source§

impl Default for CString

const: unstable · source§

impl Default for String

1.28.0 · source§

impl Default for System

1.13.0 (const: unstable) · source§

impl Default for DefaultHasher

1.7.0 · source§

impl Default for RandomState

1.9.0 · source§

impl Default for OsString

source§

impl Default for FileTimes

1.10.0 · source§

impl Default for std::sync::condvar::Condvar

source§

impl Default for Extensions

source§

impl Default for http::request::Builder

source§

impl Default for http::response::Builder

source§

impl Default for itoa::Buffer

source§

impl Default for ryu::buffer::Buffer

§

impl Default for Condvar

§

impl Default for DirBuilder

§

impl Default for FnvHasher

§

impl Default for LocalSet

§

impl Default for MissedTickBehavior

§

impl Default for Notify

§

impl Default for Once

§

impl Default for OpenOptions

§

impl Default for OpenOptions

§

impl Default for SpinWait

§

impl Default for UnparkResult

source§

impl<'a> Default for MetadataBuilder<'a>

source§

impl<'a> Default for RecordBuilder<'a>

§

impl<A> Default for SmallVec<A>where A: Array,

1.11.0 · source§

impl<B> Default for Cow<'_, B>where B: ToOwned + ?Sized, <B as ToOwned>::Owned: Default,

1.7.0 (const: unstable) · source§

impl<H> Default for BuildHasherDefault<H>

source§

impl<Idx> Default for Range<Idx>where Idx: Default,

source§

impl<K, V> Default for BTreeMap<K, V, Global>

source§

impl<K, V, S> Default for HashMap<K, V, S>where S: Default,

§

impl<R, G, T> Default for ReentrantMutex<R, G, T>where R: RawMutex, G: GetThreadId, T: Default + ?Sized,

§

impl<R, T> Default for Mutex<R, T>where R: RawMutex, T: Default + ?Sized,

§

impl<R, T> Default for RwLock<R, T>where R: RawRwLock, T: Default + ?Sized,

const: unstable · source§

impl<T> Default for &[T]

1.5.0 (const: unstable) · source§

impl<T> Default for &mut [T]

const: unstable · source§

impl<T> Default for Option<T>

1.4.0 (const: unstable) · source§

impl<T> Default for [T; 0]

1.4.0 (const: unstable) · source§

impl<T> Default for [T; 1]where T: Default,

1.4.0 (const: unstable) · source§

impl<T> Default for [T; 2]where T: Default,

1.4.0 (const: unstable) · source§

impl<T> Default for [T; 3]where T: Default,

1.4.0 (const: unstable) · source§

impl<T> Default for [T; 4]where T: Default,

1.4.0 (const: unstable) · source§

impl<T> Default for [T; 5]where T: Default,

1.4.0 (const: unstable) · source§

impl<T> Default for [T; 6]where T: Default,

1.4.0 (const: unstable) · source§

impl<T> Default for [T; 7]where T: Default,

1.4.0 (const: unstable) · source§

impl<T> Default for [T; 8]where T: Default,

1.4.0 (const: unstable) · source§

impl<T> Default for [T; 9]where T: Default,

1.4.0 (const: unstable) · source§

impl<T> Default for [T; 10]where T: Default,

1.4.0 (const: unstable) · source§

impl<T> Default for [T; 11]where T: Default,

1.4.0 (const: unstable) · source§

impl<T> Default for [T; 12]where T: Default,

1.4.0 (const: unstable) · source§

impl<T> Default for [T; 13]where T: Default,

1.4.0 (const: unstable) · source§

impl<T> Default for [T; 14]where T: Default,

1.4.0 (const: unstable) · source§

impl<T> Default for [T; 15]where T: Default,

1.4.0 (const: unstable) · source§

impl<T> Default for [T; 16]where T: Default,

1.4.0 (const: unstable) · source§

impl<T> Default for [T; 17]where T: Default,

1.4.0 (const: unstable) · source§

impl<T> Default for [T; 18]where T: Default,

1.4.0 (const: unstable) · source§

impl<T> Default for [T; 19]where T: Default,

1.4.0 (const: unstable) · source§

impl<T> Default for [T; 20]where T: Default,

1.4.0 (const: unstable) · source§

impl<T> Default for [T; 21]where T: Default,

1.4.0 (const: unstable) · source§

impl<T> Default for [T; 22]where T: Default,

1.4.0 (const: unstable) · source§

impl<T> Default for [T; 23]where T: Default,

1.4.0 (const: unstable) · source§

impl<T> Default for [T; 24]where T: Default,

1.4.0 (const: unstable) · source§

impl<T> Default for [T; 25]where T: Default,

1.4.0 (const: unstable) · source§

impl<T> Default for [T; 26]where T: Default,

1.4.0 (const: unstable) · source§

impl<T> Default for [T; 27]where T: Default,

1.4.0 (const: unstable) · source§

impl<T> Default for [T; 28]where T: Default,

1.4.0 (const: unstable) · source§

impl<T> Default for [T; 29]where T: Default,

1.4.0 (const: unstable) · source§

impl<T> Default for [T; 30]where T: Default,

1.4.0 (const: unstable) · source§

impl<T> Default for [T; 31]where T: Default,

1.4.0 (const: unstable) · source§

impl<T> Default for [T; 32]where T: Default,

const: unstable · source§

impl<T> Default for (T₁, T₂, …, Tₙ)where T: Default,

This trait is implemented for tuples up to twelve items long.

source§

impl<T> Default for Cursor<T>where T: Default,

source§

impl<T> Default for Arc<T>where T: Default,

source§

impl<T> Default for HeaderMap<T>

§

impl<T> Default for kvarn_async::prelude::Mutex<T>where T: Default,

source§

impl<T> Default for Request<T>where T: Default,

source§

impl<T> Default for Response<T>where T: Default,

§

impl<T> Default for kvarn_async::prelude::RwLock<T>where T: Default + ?Sized,

source§

impl<T> Default for Cell<T>where T: Default,

source§

impl<T> Default for LazyCell<T, fn() -> T>where T: Default,

source§

impl<T> Default for kvarn_async::prelude::compact_str::core::cell::OnceCell<T>

source§

impl<T> Default for RefCell<T>where T: Default,

source§

impl<T> Default for SyncUnsafeCell<T>where T: Default,

1.10.0 · source§

impl<T> Default for UnsafeCell<T>where T: Default,

1.19.0 · source§

impl<T> Default for Reverse<T>where T: Default,

1.2.0 (const: unstable) · source§

impl<T> Default for kvarn_async::prelude::compact_str::core::iter::Empty<T>

const: unstable · source§

impl<T> Default for PhantomData<T>where T: ?Sized,

1.20.0 · source§

impl<T> Default for ManuallyDrop<T>where T: Default + ?Sized,

source§

impl<T> Default for Saturating<T>where T: Default,

source§

impl<T> Default for Wrapping<T>where T: Default,

1.62.0 · source§

impl<T> Default for AssertUnwindSafe<T>where T: Default,

const: unstable · source§

impl<T> Default for AtomicPtr<T>

source§

impl<T> Default for Exclusive<T>where T: Default + ?Sized,

const: unstable · source§

impl<T> Default for Box<[T], Global>

source§

impl<T> Default for Box<T, Global>where T: Default,

source§

impl<T> Default for BinaryHeap<T>where T: Ord,

source§

impl<T> Default for BTreeSet<T, Global>

source§

impl<T> Default for LinkedList<T>

source§

impl<T> Default for VecDeque<T, Global>

source§

impl<T> Default for Rc<T>where T: Default,

1.10.0 · source§

impl<T> Default for alloc::rc::Weak<T>

1.10.0 · source§

impl<T> Default for alloc::sync::Weak<T>

const: unstable · source§

impl<T> Default for Vec<T, Global>

source§

impl<T> Default for LazyLock<T, fn() -> T>where T: Default,

1.10.0 · source§

impl<T> Default for std::sync::mutex::Mutex<T>where T: Default + ?Sized,

const: unstable · source§

impl<T> Default for OnceLock<T>

1.10.0 · source§

impl<T> Default for std::sync::rwlock::RwLock<T>where T: Default,

§

impl<T> Default for JoinSet<T>

§

impl<T> Default for OnceCell<T>

source§

impl<T, S> Default for HashSet<T, S>where S: Default,

source§

impl<T, const LANES: usize> Default for Mask<T, LANES>where T: MaskElement, LaneCount<LANES>: SupportedLaneCount,

source§

impl<T, const LANES: usize> Default for Simd<T, LANES>where LaneCount<LANES>: SupportedLaneCount, T: SimdElement + Default,