Skip to main content

axon_encoder/
types.rs

1//! Standardized types for encoder inputs and outputs.
2
3/// A single spike event.
4#[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, // or relative step
9    pub polarity: bool, // or strength
10}
11
12/// Optional metadata about the encoding process.
13#[derive(Clone, Debug, Default, PartialEq, Eq)]
14#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
15pub struct EncodingMetadata {
16    // Add any relevant metadata fields here, e.g.:
17    // pub source_sample_index: u64,
18}
19
20/// The standardized output of an encoder.
21#[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/// General-purpose configuration for encoders.
36#[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}