osc94 0.1.3

Library for handling progress bar sequences (OSC 9;4).
Documentation
//! This module is for handling raw progress bar sequence (OSC 9;4).

use super::ProgressState;
use core::fmt::{self, Display};

/// A raw progress bar sequence (OSC 9;4).
#[derive(Default, Debug, Clone, Copy, PartialEq, Eq)]
pub struct OSC94 {
    /// The state of the progress bar.
    pub state: ProgressState,
    /// The progress value (0-100).
    pub progress: u8,
}

impl OSC94 {
    /// Creates a default progress bar sequence.
    #[must_use]
    pub fn new() -> Self {
        Self::default()
    }
}

impl Display for OSC94 {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        write!(f, "\x1b]9;4;{};{}\x07", self.state as u8, self.progress)
    }
}

#[cfg(test)]
mod tests {
    use super::*;
    use std::format;

    #[test]
    fn test_raw_progress_sequence() {
        let sequence = OSC94::new();
        assert_eq!(format!("{sequence}"), "\x1b]9;4;0;0\x07");
    }
}