1#[derive(Clone, Copy, Debug, PartialEq, Eq)]
5#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6pub struct SpikeEvent {
7 pub channel: u16,
8 pub timestamp: u64, pub polarity: bool, }
11
12#[derive(Clone, Debug, Default, PartialEq, Eq)]
14#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
15pub struct EncodingMetadata {
16 }
19
20#[derive(Clone, Debug, Default, PartialEq)]
22#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
23pub struct EncodedOutput {
24 pub spikes: Vec<SpikeEvent>,
25 pub embeddings: Option<Vec<f32>>,
26 pub metadata: Option<EncodingMetadata>,
27}
28
29impl EncodedOutput {
30 pub fn new() -> Self {
31 Self::default()
32 }
33}
34
35#[derive(Clone, Debug, PartialEq, Eq)]
37#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
38pub struct EncoderConfig {
39 pub input_channels: usize,
40 pub output_channels: usize,
41}
42
43impl Default for EncoderConfig {
44 fn default() -> Self {
45 Self {
46 input_channels: 256,
47 output_channels: 256,
48 }
49 }
50}
51
52#[cfg(test)]
53mod tests {
54 use super::*;
55
56 #[test]
57 fn test_encoded_output_new() {
58 let output = EncodedOutput::new();
59 assert!(output.spikes.is_empty());
60 assert!(output.embeddings.is_none());
61 assert!(output.metadata.is_none());
62 }
63
64 #[test]
65 fn test_encoder_config_default() {
66 let config = EncoderConfig::default();
67 assert_eq!(config.input_channels, 256);
68 assert_eq!(config.output_channels, 256);
69 }
70}