1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
use rlua::prelude::*;
use std::fs;
use std::io::Read;
use xz2::read::*;
use super::ByteBuf;

pub fn init(lua: &Lua) -> crate::Result<()> {
    let module = lua.create_table()?;
    module.set("decompress", lua.create_function(|_, file: (String)| {
        let file = fs::File::open(&file).map_err(LuaError::external)?;
        let mut data = XzDecoder::new(file);
        let mut buf = vec![];
        data.read_to_end(&mut buf).map_err(LuaError::external)?;
        Ok(ByteBuf(buf))
    })?)?;

    lua.globals().set("xz", module)?;

    Ok(())
}