1#[derive(Debug, Clone, Copy, PartialEq, Eq)]
8pub enum ClapFeature {
9 Instrument,
11 AudioEffect,
12 NoteDetector,
13 NoteEffect,
14 Analyzer,
16 Synthesizer,
17 Sampler,
18 Drum,
19 DrumMachine,
20 Filter,
21 Phaser,
22 Equalizer,
23 Deesser,
24 PhaseVocoder,
25 Granular,
26 FrequencyShifter,
27 PitchShifter,
28 Distortion,
29 TransientShaper,
30 Compressor,
31 Expander,
32 Gate,
33 Limiter,
34 Flanger,
35 Chorus,
36 Delay,
37 Reverb,
38 Tremolo,
39 Glitch,
40 Utility,
41 PitchCorrection,
42 Restoration,
43 MultiEffects,
44 Mixing,
45 Mastering,
46 Mono,
47 Stereo,
48 Surround,
49 Ambisonic,
50 Custom(&'static str),
53}
54
55impl ClapFeature {
56 pub fn as_str(&self) -> &'static str {
57 match self {
58 ClapFeature::Instrument => "instrument",
59 ClapFeature::AudioEffect => "audio-effect",
60 ClapFeature::NoteDetector => "note-detector",
61 ClapFeature::NoteEffect => "note-effect",
62 ClapFeature::Analyzer => "analyzer",
63 ClapFeature::Synthesizer => "synthesizer",
64 ClapFeature::Sampler => "sampler",
65 ClapFeature::Drum => "drum",
66 ClapFeature::DrumMachine => "drum-machine",
67 ClapFeature::Filter => "filter",
68 ClapFeature::Phaser => "phaser",
69 ClapFeature::Equalizer => "equalizer",
70 ClapFeature::Deesser => "de-esser",
71 ClapFeature::PhaseVocoder => "phase-vocoder",
72 ClapFeature::Granular => "granular",
73 ClapFeature::FrequencyShifter => "frequency-shifter",
74 ClapFeature::PitchShifter => "pitch-shifter",
75 ClapFeature::Distortion => "distortion",
76 ClapFeature::TransientShaper => "transient-shaper",
77 ClapFeature::Compressor => "compressor",
78 ClapFeature::Expander => "expander",
79 ClapFeature::Gate => "gate",
80 ClapFeature::Limiter => "limiter",
81 ClapFeature::Flanger => "flanger",
82 ClapFeature::Chorus => "chorus",
83 ClapFeature::Delay => "delay",
84 ClapFeature::Reverb => "reverb",
85 ClapFeature::Tremolo => "tremolo",
86 ClapFeature::Glitch => "glitch",
87 ClapFeature::Utility => "utility",
88 ClapFeature::PitchCorrection => "pitch-correction",
89 ClapFeature::Restoration => "restoration",
90 ClapFeature::MultiEffects => "multi-effects",
91 ClapFeature::Mixing => "mixing",
92 ClapFeature::Mastering => "mastering",
93 ClapFeature::Mono => "mono",
94 ClapFeature::Stereo => "stereo",
95 ClapFeature::Surround => "surround",
96 ClapFeature::Ambisonic => "ambisonic",
97 ClapFeature::Custom(s) => {
98 crate::nice_debug_assert!(
102 s.contains(':') && s.split(':').all(|x| !x.is_empty()),
103 "'{s}' is not a valid feature, custom features must be namespaced (e.g. \
104 'nice:{s}')",
105 s = s
106 );
107
108 s
109 }
110 }
111 }
112}