rustlol 0.1.1

A wad files lib
Documentation
#[derive(Debug)]
pub struct Magic {
    pub magic: Vec<u8>,
    pub extension: &'static str,
    pub offset: usize
}
impl Magic {
    pub fn find(ptr: *const u8) -> &'static str{
        let list: [Magic; 58] = [
        Magic{magic: "RW\x01".as_bytes().to_vec(), extension: ".wad", offset: 0},
        Magic{magic:"RW\x02".as_bytes().to_vec(), extension: ".wad", offset: 0},
        Magic{magic:"RW\x03".as_bytes().to_vec(), extension: ".wad", offset: 0},
        Magic{magic:"RLSM".as_bytes().to_vec(),extension: ".releasemanifest", offset: 0},
        Magic{magic:"RMAN".as_bytes().to_vec(),extension: ".manifest",offset: 0},
        Magic{magic:"RADS Solution".as_bytes().to_vec(),extension: ".solutionmanifest",offset: 0},
        Magic{magic:"RST".as_bytes().to_vec(),extension: ".stringtable",offset: 0},
        Magic{magic:"\x00\x00\x01\x00".as_bytes().to_vec(),extension:".ico",offset: 0},
        Magic{magic:"\x47\x49\x46\x38\x37\x61".as_bytes().to_vec(),extension:".gif",offset: 0},
        Magic{magic:"\x47\x49\x46\x38\x39\x61".as_bytes().to_vec(),extension:".gif",offset: 0},
        Magic{magic:"\x49\x49\x2A\x00".as_bytes().to_vec(),extension:".tif",offset: 0},
        Magic{magic:"\x49\x49\x00\x2A".as_bytes().to_vec(),extension:".tiff",offset: 0},
        Magic{magic:[0xFF, 0xD8, 0xFF, 0xDB].to_vec(),extension:".jpg",offset: 0},
        Magic{magic:[0xFF,0xD8,0xFF,0xE0].to_vec(),extension:".jpg",offset: 0},
        Magic{magic:[0xFF,0xD8,0xFF,0xEE].to_vec(),extension:".jpg",offset: 0},
        Magic{magic:[0xFF,0xD8,0xFF,0xE1].to_vec(),extension:".jpg",offset: 0},
        Magic{magic:"\x42\x4D".as_bytes().to_vec(),extension:".bmp",offset: 0},
        Magic{magic:[0x89,0x50,0x4E,0x47,0x0D,0x0A,0x1A,0x0A].to_vec(),extension:".png",offset: 0},
        Magic{magic:"DDS".as_bytes().to_vec(),extension:".dds",offset: 0},
        Magic{magic:"TEX\0".as_bytes().to_vec(),extension:".tex",offset: 0},
        Magic{magic:"OggS".as_bytes().to_vec(),extension:".ogg",offset: 0},
        Magic{magic:"\x00\x01\x00\x00\x00".as_bytes().to_vec(),extension:".ttf",offset: 0},
        Magic{magic:"\x74\x72\x75\x65\x00".as_bytes().to_vec(),extension:".ttf",offset: 0},
        Magic{magic:"OTTO\x00".as_bytes().to_vec(),extension:".otf",offset: 0},
        Magic{magic:"PROP".as_bytes().to_vec(),extension:".bin",offset: 0},
        Magic{magic:"PTCH".as_bytes().to_vec(),extension:".bin",offset: 0},
        Magic{magic:"BKHD".as_bytes().to_vec(),extension:".bnk",offset: 0},
        Magic{magic:"[ObjectBegin]".as_bytes().to_vec(),extension:".sco",offset: 0},
        Magic{magic:"r3d2Mesh".as_bytes().to_vec(),extension:".scb",offset: 0},
        Magic{magic:"r3d2aims".as_bytes().to_vec(),extension:".aimesh",offset: 0},
        Magic{magic:"r3d2anmd".as_bytes().to_vec(),extension:".anm",offset: 0},
        Magic{magic:"r3d2canm".as_bytes().to_vec(),extension:".anm",offset: 0},
        Magic{magic:"r3d2sklt".as_bytes().to_vec(),extension:".skl",offset: 0},
        Magic{magic:"r3d2blnd".as_bytes().to_vec(),extension:".blnd",offset: 0},
        Magic{magic:"r3d2wght".as_bytes().to_vec(),extension:".wgt",offset: 0},
        Magic{magic:"r3d2".as_bytes().to_vec(),extension:".wpk",offset: 0},
        Magic{magic:[0xC3,0x4F,0xFD,0x22].to_vec(),extension:".skl",offset: 4},
        Magic{magic:"\x33\x22\x11\x00".as_bytes().to_vec(),extension:".skn",offset: 0},
        Magic{magic:"PreLoad".as_bytes().to_vec(),extension:".preload",offset: 0},
        Magic{magic:"\x1BLuaQ\x00\x01\x04\x04".as_bytes().to_vec(),extension:".luabin",offset: 0},
        Magic{magic:"\x1BLuaQ\x00\x01\x04\x08".as_bytes().to_vec(),extension:".luabin64",offset: 0},
        Magic{magic:"OPAM".as_bytes().to_vec(),extension:".mob",offset: 0},
        Magic{magic:"[MaterialBegin]".as_bytes().to_vec(),extension:".mat",offset: 0},
        Magic{magic:"WGEO".as_bytes().to_vec(),extension:".wgeo",offset: 0},
        Magic{magic:"MGEO".as_bytes().to_vec(),extension:".mapgeo",offset: 0},
        Magic{magic:"OEGM".as_bytes().to_vec(),extension:".mapgeo",offset: 0},
        Magic{magic:"NVR\x00".as_bytes().to_vec(),extension:".nvr",offset: 0},
        Magic{magic:"{\r\n".as_bytes().to_vec(),extension:".json",offset: 0},
        Magic{magic:"[\r\n".as_bytes().to_vec(),extension:".json",offset: 0},
        Magic{magic:"<?xml".as_bytes().to_vec(),extension:".xml",offset: 0},
        // There is more of those:
        Magic{magic:"\x00\x00\x0A\x00\x00\x00\x00\x00".as_bytes().to_vec(),extension:".tga",offset: 0},
        Magic{magic:"\x00\x00\x0A\x00\x00\x00\x00\x00".as_bytes().to_vec(),extension:".tga",offset: 0},
        Magic{magic:"\x00\x00\x03\x00\x00\x00\x00\x00".as_bytes().to_vec(),extension:".tga",offset: 0},
        Magic{magic:"\x00\x00\x02\x00\x00\x00\x00\x00".as_bytes().to_vec(),extension:".tga",offset: 0},
        Magic{magic:"\x50\x4B\x03\x04".as_bytes().to_vec(),extension:".zip",offset: 0},
        Magic{magic:"\x52\x61\x72\x21\x1A\x07".as_bytes().to_vec(),extension:".rar",offset: 0},
        Magic{magic:[0x1F,0x8B, 0x08].to_vec(), extension:".gz",offset: 0},
        Magic{magic:"\x75\x73\x74\x61\x72".as_bytes().to_vec(),extension:".tar",offset: 0},
    ];
        
        for magic in list {
            let src =unsafe { std::slice::from_raw_parts(ptr.add(magic.offset), magic.magic.len()) };
            if src[..magic.magic.len()] == magic.magic {
                return magic.extension;
            } else {
                continue;
            }
            

        }
        ""
    }
}