Sending the IQM file into nom

main
_ 2020-01-09 00:18:12 +00:00
parent 90484feee5
commit 8b25b2fadd
1 changed files with 41 additions and 4 deletions

View File

@ -11,11 +11,46 @@ use sdl2::keyboard::Keycode;
use std::collections::HashMap;
use std::convert::TryInto;
use std::ffi::{c_void, CStr, CString};
use std::fs::File;
use std::io::Read;
use std::path::Path;
use std::time::Duration;
pub fn parse_iqm (input: &str) -> IResult<&str, ()> {
let (input, _) = tag("#")(input)?;
Ok((input, ()))
pub fn parse_iqm (input: &[u8]) -> IResult<&[u8], ()> {
let (input, _) = tag (b"INTERQUAKEMODEL\0")(input)?;
Ok ((input, ()))
}
pub struct IqmBuffer {
data: Vec <u8>,
}
pub fn load_small_file <P> (name: P) -> Vec <u8>
where P: AsRef <Path>
{
let mut f = File::open (name).unwrap ();
let len = f.metadata ().unwrap ().len ();
if len > 1024 * 1024 {
panic! ("File is too big");
}
let mut data = vec! [0u8; len.try_into ().unwrap ()];
f.read (&mut data [..]).unwrap ();
data
}
impl IqmBuffer {
pub fn from_buffer (data: Vec <u8>) -> IqmBuffer {
assert_eq! (parse_iqm (&data [..]), Ok ((&data [16..], ())));
IqmBuffer {
data,
}
}
}
const VERT_SHADER_SRC: &str =
@ -326,6 +361,8 @@ mod tests {
#[test]
pub fn iqm () {
assert_eq! (parse_iqm ("#"), Ok (("", ())));
assert_eq! (parse_iqm (b"INTERQUAKEMODEL\0"), Ok ((&b"" [..], ())));
IqmBuffer::from_buffer (load_small_file ("pumpking.iqm"));
}
}