rust_unreal_unpak/
lib.rs

1extern crate tokio;
2
3#[macro_use]
4extern crate lazy_static;
5
6mod cursor_ext;
7pub mod pak;
8
9use pak::*;
10
11#[cfg(test)]
12mod tests {
13    use std::{fs::File, io::{Write, Read}};
14
15    use super::pak_reader::PakReader;
16    use super::pak_file::PakFile;
17
18    lazy_static! {
19        static ref TEST_FILE_BUFFER: Vec<u8> = get_test_buffer();
20    }
21
22    fn dump_buffer_to_file(name: &str, buffer: &Vec<u8>) {
23        let mut file = File::create(name).unwrap();
24        file.write_all(buffer.as_slice());
25    }
26
27    fn get_test_buffer() -> Vec<u8> {
28        let mut buffer = Vec::new();
29        let mut file = File::open("test-paks/pakchunk0-WindowsNoEditor.pak").unwrap();
30
31        file.read_to_end(&mut buffer).unwrap();
32        return buffer;
33    }
34
35    #[tokio::test]
36    async fn read_pak_header() {
37        let mut reader = PakReader::new(TEST_FILE_BUFFER.clone());
38        reader.get_pak_info().await.unwrap();
39    }
40
41    #[tokio::test]
42    async fn read_pak_data() {
43        let pak = PakFile::from_memory(TEST_FILE_BUFFER.clone()).await.unwrap();
44    }
45
46    #[tokio::test]
47    async fn read_pak_entry_data_uncompressed() {
48        let mut pak = PakFile::from_memory(TEST_FILE_BUFFER.clone()).await.unwrap();
49        let entry_data = pak.get_entry_data("DeadByDaylight/Content/Blueprints/Props/05-Suburbs/BP_Garbage1.uasset").await.unwrap().unwrap();
50        dump_buffer_to_file("test-data/test-uncompressed.dat", &entry_data);
51    }
52
53    #[tokio::test]
54    async fn read_pak_entry_data_lzib() {
55        let mut pak = PakFile::from_memory(TEST_FILE_BUFFER.clone()).await.unwrap();
56        let entry_data = pak.get_entry_data("DeadByDaylight/Config/DefaultGameUserSettings.ini").await.unwrap().unwrap();
57        dump_buffer_to_file("test-data/test-zlib.dat", &entry_data);
58    }
59}