Defaults

Trait Defaults 

Source
pub trait Defaults<T> {
    // Required method
    fn defaults() -> T
       where Self: Default;
}
Expand description

Create a ‘default’ container type T with N instances of Self. Used when we need a collection of default type instances e.g. when creating a default bank we need 16 default patterns.

Using the ot_tools_io_derive::DefaultsAsArray, DefaultsAsArrayBoxed proc_macro will automatically derive implementations for

  • T: [Self; N]
  • T: Box<serde_big_array::Array<Self, N>>

If you need to handle incrementing id fields, see the existing examples for the following types

use std::array::from_fn;
use serde_big_array::Array;
use ot_tools_io::Defaults;

struct SomeType {
    x: u8,
}

impl Default for SomeType {
    fn default() -> Self {
        Self { x: 0 }
    }
}

impl<const N: usize> Defaults<[SomeType; N]> for SomeType {
    fn defaults() -> [Self; N] where Self: Default {
        from_fn(|_| Self::default())
    }
}

impl<const N: usize> Defaults<Box<Array<SomeType, N>>> for SomeType {
    fn defaults() -> Box<Array<Self, N>> where Self: Defaults<[Self; N]> {
        Box::new(Array(
            // use the [Self; N] impl to generate values
            <Self as Defaults<[Self; N]>>::defaults()
        ))
    }
}

impl<const N: usize> Defaults<Array<SomeType, N>> for SomeType {
    fn defaults() -> Array<Self, N> where Self: Defaults<[Self; N]> {
        Array(
            // use the [Self; N] impl to generate values
            <Self as Defaults<[Self; N]>>::defaults()
        )
    }
}

let xs: [SomeType; 20] = SomeType::defaults();
assert_eq!(xs.len(), 20);

let xs: [SomeType; 25] = SomeType::defaults();
assert_eq!(xs.len(), 25);

let xs: Box<Array<SomeType, 20>> = SomeType::defaults();
assert_eq!(xs.len(), 20);

let xs: Box<Array<SomeType, 25>> = SomeType::defaults();
assert_eq!(xs.len(), 25);

let xs: Array<SomeType, 20> = SomeType::defaults();
assert_eq!(xs.len(), 20);

let xs: Array<SomeType, 25> = SomeType::defaults();
assert_eq!(xs.len(), 25);

Required Methods§

Source

fn defaults() -> T
where Self: Default,

Create an default container type T containing N default instances of Self.

Implementors§

Source§

impl<const N: usize> Defaults<Box<Array<ArrangeRow, N>>> for ArrangeRow

Source§

impl<const N: usize> Defaults<Box<Array<BankFile, N>>> for BankFile

Source§

impl<const N: usize> Defaults<Box<Array<AudioTrackMachineSlot, N>>> for AudioTrackMachineSlot

Source§

impl<const N: usize> Defaults<Box<Array<AudioTrackMachinesParamsSetup, N>>> for AudioTrackMachinesParamsSetup

Source§

impl<const N: usize> Defaults<Box<Array<AudioTrackMachinesParamsValues, N>>> for AudioTrackMachinesParamsValues

Source§

impl<const N: usize> Defaults<Box<Array<AudioTrackParamsSetup, N>>> for AudioTrackParamsSetup

Source§

impl<const N: usize> Defaults<Box<Array<AudioTrackParamsValues, N>>> for AudioTrackParamsValues

Source§

impl<const N: usize> Defaults<Box<Array<AudioTrackVolume, N>>> for AudioTrackVolume

Source§

impl<const N: usize> Defaults<Box<Array<CustomLfoDesign, N>>> for CustomLfoDesign

Source§

impl<const N: usize> Defaults<Box<Array<CustomLfoInterpolationMask, N>>> for CustomLfoInterpolationMask

Source§

impl<const N: usize> Defaults<Box<Array<MidiArpSequence, N>>> for MidiArpSequence

Source§

impl<const N: usize> Defaults<Box<Array<MidiTrackParamsSetup, N>>> for MidiTrackParamsSetup

Source§

impl<const N: usize> Defaults<Box<Array<MidiTrackParamsValues, N>>> for MidiTrackParamsValues

Source§

impl<const N: usize> Defaults<Box<Array<Part, N>>> for Part

Source§

impl<const N: usize> Defaults<Box<Array<RecorderSetup, N>>> for RecorderSetup

Source§

impl<const N: usize> Defaults<Box<Array<SceneParams, N>>> for SceneParams

Source§

impl<const N: usize> Defaults<Box<Array<SceneParamsArray, N>>> for SceneParamsArray

Source§

impl<const N: usize> Defaults<Box<Array<SceneXlvAssignments, N>>> for SceneXlvAssignments

Source§

impl<const N: usize> Defaults<Box<Array<AudioTrackParameterLocks, N>>> for AudioTrackParameterLocks

Source§

impl<const N: usize> Defaults<Box<Array<AudioTrackParameterLocksArray, N>>> for AudioTrackParameterLocksArray

Source§

impl<const N: usize> Defaults<Box<Array<AudioTrackTrigs, N>>> for AudioTrackTrigs

Source§

impl<const N: usize> Defaults<Box<Array<MidiTrackParameterLocks, N>>> for MidiTrackParameterLocks

Source§

impl<const N: usize> Defaults<Box<Array<MidiTrackTrigs, N>>> for MidiTrackTrigs

Source§

impl<const N: usize> Defaults<Box<Array<Pattern, N>>> for Pattern

Source§

impl<const N: usize> Defaults<[ArrangeRow; N]> for ArrangeRow

Source§

impl<const N: usize> Defaults<[BankFile; N]> for BankFile

Source§

impl<const N: usize> Defaults<[AudioTrackMachineSlot; N]> for AudioTrackMachineSlot

Source§

impl<const N: usize> Defaults<[AudioTrackMachinesParamsSetup; N]> for AudioTrackMachinesParamsSetup

Source§

impl<const N: usize> Defaults<[AudioTrackMachinesParamsValues; N]> for AudioTrackMachinesParamsValues

Source§

impl<const N: usize> Defaults<[AudioTrackParamsSetup; N]> for AudioTrackParamsSetup

Source§

impl<const N: usize> Defaults<[AudioTrackParamsValues; N]> for AudioTrackParamsValues

Source§

impl<const N: usize> Defaults<[AudioTrackVolume; N]> for AudioTrackVolume

Source§

impl<const N: usize> Defaults<[CustomLfoDesign; N]> for CustomLfoDesign

Source§

impl<const N: usize> Defaults<[CustomLfoInterpolationMask; N]> for CustomLfoInterpolationMask

Source§

impl<const N: usize> Defaults<[MidiArpSequence; N]> for MidiArpSequence

Source§

impl<const N: usize> Defaults<[MidiTrackParamsSetup; N]> for MidiTrackParamsSetup

Source§

impl<const N: usize> Defaults<[MidiTrackParamsValues; N]> for MidiTrackParamsValues

Source§

impl<const N: usize> Defaults<[Part; N]> for Part

Source§

impl<const N: usize> Defaults<[RecorderSetup; N]> for RecorderSetup

Source§

impl<const N: usize> Defaults<[SceneParams; N]> for SceneParams

Source§

impl<const N: usize> Defaults<[SceneParamsArray; N]> for SceneParamsArray

Source§

impl<const N: usize> Defaults<[SceneXlvAssignments; N]> for SceneXlvAssignments

Source§

impl<const N: usize> Defaults<[AudioTrackParameterLocks; N]> for AudioTrackParameterLocks

Source§

impl<const N: usize> Defaults<[AudioTrackParameterLocksArray; N]> for AudioTrackParameterLocksArray

Source§

impl<const N: usize> Defaults<[AudioTrackTrigs; N]> for AudioTrackTrigs

Source§

impl<const N: usize> Defaults<[MidiTrackParameterLocks; N]> for MidiTrackParameterLocks

Source§

impl<const N: usize> Defaults<[MidiTrackTrigs; N]> for MidiTrackTrigs

Source§

impl<const N: usize> Defaults<[Pattern; N]> for Pattern