acridotheres-3ds 0.2.1

Nintendo 3DS-specific file formats for Acridotheres
Documentation
use super::UmsbtFileSource;
use dh::{recommended::*, Writable};
use std::io::Result;

pub fn create<'a>(
    mut files: Vec<UmsbtFileSource<'a>>,
    target: &mut dyn Writable<'a>,
    buffer_size: u64,
) -> Result<()> {
    let body_offset = files.len() * 8 + 8;
    target.write_bytes(vec![0; body_offset].as_slice())?;

    files.sort_by(|a, b| a.metadata.path.cmp(&b.metadata.path));

    for (i, file) in files.into_iter().enumerate() {
        let offset = target.pos()? as i32;
        file.reader.copy_at(
            file.metadata.offset as u64,
            file.metadata.size as u64,
            target,
            buffer_size,
        )?;

        target.write_i32le_at((i * 8) as u64, offset)?;
        target.write_i32le_at((i * 8 + 4) as u64, file.metadata.size)?;
    }

    Ok(())
}