xmrs 0.9.10

A library to edit SoundTracker data with pleasure
Documentation
use crate::import::patternslot::PatternSlot;
use alloc::{vec, vec::Vec};

pub struct XpPattern;

impl XpPattern {
    /// XP file must have 32 tracks per row
    pub fn save(pattern: &[Vec<PatternSlot>]) -> Option<Vec<u8>> {
        let mut data: Vec<u8> = vec![];
        let version: u16 = 1;
        let nrow: u16 = pattern.len() as u16;

        if pattern[0].len() != 32 {
            return None;
        }

        data.append(
            &mut bincode::serde::encode_to_vec(version, bincode::config::legacy()).unwrap(),
        );
        data.append(&mut bincode::serde::encode_to_vec(nrow, bincode::config::legacy()).unwrap());

        for row in pattern {
            for ps in row {
                let mut d = ps.save_xm_unpack();
                data.append(&mut d);
            }
        }

        Some(data)
    }
}