1use derive_builder::Builder;
2use fundsp::DEFAULT_SR;
3
4const DEFAULT_HEIGHT: usize = 500;
5
6#[derive(Debug, Clone, Builder)]
7pub struct SnapshotConfig {
9 #[builder(default = "1024")]
13 pub num_samples: usize,
14 #[builder(default = "fundsp::DEFAULT_SR")]
18 pub sample_rate: f64,
19 #[builder(default = "None")]
23 pub svg_width: Option<usize>,
24 #[builder(default = "DEFAULT_HEIGHT")]
28 pub svg_height_per_channel: usize,
29 #[builder(default = "Processing::default()")]
33 pub processing_mode: Processing,
34 #[builder(default = "false")]
38 pub with_inputs: bool,
39 #[builder(default = "None")]
43 pub chart_title: Option<String>,
44 #[builder(default = "false")]
48 pub show_grid: bool,
49 #[builder(default = "true")]
53 pub show_labels: bool,
54 #[builder(default = "None")]
58 pub output_colors: Option<Vec<String>>,
59 #[builder(default = "None")]
63 pub input_colors: Option<Vec<String>>,
64 #[builder(default = "\"#000000\".to_string()")]
68 pub background_color: String,
69 #[builder(default = "2.0")]
73 pub line_width: f32,
74}
75
76#[derive(Debug, Clone, Copy, Default)]
78pub enum Processing {
79 #[default]
80 Tick,
82 Batch(u8),
86}
87
88impl Default for SnapshotConfig {
89 fn default() -> Self {
90 Self {
91 num_samples: 1024,
92 sample_rate: DEFAULT_SR,
93 svg_width: None,
94 svg_height_per_channel: DEFAULT_HEIGHT,
95 processing_mode: Processing::default(),
96 with_inputs: false,
97 chart_title: None,
98 show_grid: false,
99 show_labels: true,
100 output_colors: None,
101 input_colors: None,
102 background_color: "#000000".to_string(),
103 line_width: 2.0,
104 }
105 }
106}
107
108#[cfg(test)]
109mod tests {
110 use super::*;
111
112 #[test]
113 fn test_default_builder() {
114 SnapshotConfigBuilder::default()
115 .build()
116 .expect("defaul config builds");
117 }
118}