FastWaveBackend/src/vcd/parse.rs

91 lines
2.1 KiB
Rust
Raw Normal View History

2022-06-09 01:45:47 +00:00
use chrono::prelude::*;
use itertools::Itertools;
2022-06-04 01:06:46 +00:00
use std::fs::File;
use ::function_name::named;
2022-06-19 13:44:57 +00:00
use super::*;
2022-06-13 02:52:24 +00:00
2022-06-19 13:44:57 +00:00
mod combinator_atoms;
use combinator_atoms::*;
2022-06-04 01:06:46 +00:00
2022-06-19 13:44:57 +00:00
mod types;
use types::*;
2022-06-22 01:06:51 +00:00
mod metadata;
use metadata::*;
2022-06-04 01:06:46 +00:00
2022-07-13 00:02:45 +00:00
// use function_name::named;
#[named]
fn parse_signal_tree<'a>(
word_reader : &mut WordReader,
vcd : &'a mut VCD
) -> Result<&'a mut VCD, String> {
let err : Result<&'a mut VCD, String> = Err(format!("reached end of file without parser leaving {}", function_name!()));
// we assume we've already seen a `$scope` once
// by the time we reach this function
// let scope_name =
loop {
let word = word_reader.next_word();
// if there isn't another word left in the file, then we exit
if word.is_none() {
return err;
}
}
Ok(vcd)
}
2022-06-04 01:06:46 +00:00
pub fn parse_vcd(file : File) {
let mut word_gen = WordReader::new(file);
2022-06-11 04:01:53 +00:00
let header = parse_metadata(&mut word_gen).unwrap();
2022-07-13 00:02:45 +00:00
dbg!(&header);
// let (word, cursor) = word_gen.next_word().unwrap();
// cursor.error(word).unwrap();
let mut vcd = VCD{
metadata: header,
all_signals: vec![],
all_scopes: vec![]
};
2022-06-18 05:00:01 +00:00
}
#[cfg(test)]
mod tests {
use super::*;
use crate::test;
2022-06-18 05:00:01 +00:00
use std::fs::File;
#[test]
fn headers() {
// TODO: eventually, once all dates pass, merge the following
// two loops
// testing dates
for file in test::good_date_files {
2022-06-18 05:00:01 +00:00
let metadata = parse_metadata(
&mut WordReader::new(
File::open(file)
.unwrap()
)
);
assert!(metadata.is_ok());
assert!(metadata.unwrap().date.is_some());
}
for file in test::files {
let metadata = parse_metadata(
&mut WordReader::new(
File::open(file)
.unwrap()
)
);
assert!(metadata.is_ok());
let (scalar, timescale) = metadata.unwrap().timescale;
assert!(scalar.is_some());
}
2022-06-18 05:00:01 +00:00
}
2022-06-04 01:06:46 +00:00
}