tekhsi_rs 0.1.1

High-performance client for Tektronix TekHSI enabled oscilloscopes
Documentation
use super::{AnalogWaveform, DigitalWaveform, IqWaveform};

/// Decoded waveform payloads.
///
/// This enum represents three types of waveform data:
/// - [`Waveform::Analog`]: Voltage waveforms from oscilloscope analog channels
/// - [`Waveform::Digital`]: Bit waveforms from digital inputs or logic probes
/// - [`Waveform::Iq`]: Complex I/Q waveforms from spectrum or RF analysis
///
/// ```rust
/// use tekhsi_rs::data::{AnalogSamples, AnalogWaveform, Waveform};
/// use smol_str::SmolStr;
///
/// let analog = AnalogWaveform {
///     source_name: SmolStr::new("ch1"),
///     y_axis_values: AnalogSamples::I8(vec![1, 2]),
///     y_axis_spacing: 1.0,
///     y_axis_offset: 0.0,
///     y_axis_units: SmolStr::new("V"),
///     x_axis_spacing: 1.0,
///     x_axis_units: SmolStr::new("s"),
///     trigger_index: 0.0,
/// };
/// let waveform = Waveform::Analog(analog);
/// assert_eq!(waveform.record_length(), 2);
/// ```
#[derive(Debug)]
pub enum Waveform {
    Analog(AnalogWaveform),
    Digital(DigitalWaveform),
    Iq(IqWaveform),
}

impl Waveform {
    /// Returns the record length of the waveform in samples.
    pub fn record_length(&self) -> usize {
        match self {
            Waveform::Analog(waveform) => waveform.record_length(),
            Waveform::Digital(waveform) => waveform.record_length(),
            Waveform::Iq(waveform) => waveform.record_length(),
        }
    }
}