netlist_db/parser/
data_mc.rs1use std::path::PathBuf;
2
3use super::{
4 BEGIN_TITLE,
5 utils::{name_str, space, space_newline},
6};
7use crate::{err::ParseError, span::LocatedSpan};
8use nom::{
9 IResult, Parser,
10 bytes::complete::{tag, take_until},
11 character::complete::char,
12 combinator::{map, opt},
13 multi::separated_list1,
14};
15use tokio::fs::read_to_string;
16
17#[inline]
18fn data_mc0_variation<'a>(i: LocatedSpan<'a>) -> IResult<LocatedSpan<'a>, Vec<String>> {
19 map(
20 (
21 take_until(BEGIN_TITLE),
22 take_until("\n"),
23 space_newline,
24 opt((tag("index"), space, char(','), space)),
25 separated_list1(
26 (space, char(','), space),
27 map(name_str, |(s, _)| String::from(s)),
28 ),
29 ),
30 |(_, _, _, _, variation)| variation,
31 )
32 .parse_complete(i)
33}
34
35#[inline]
36pub async fn data_mc0_variation_csv(path: PathBuf) -> Result<Vec<String>, ()> {
37 match read_to_string(&path).await {
38 Ok(s) => {
39 let (_, out) = data_mc0_variation(s.as_str().into()).map_err(|e| {
40 let err: ParseError = e.into();
41 err.report(&mut true, &crate::FileId::Include { path }, &s);
42 })?;
43 Ok(out)
44 }
45 Err(e) => {
46 let err: ParseError = e.into();
47 err.report(&mut true, &crate::FileId::Include { path }, "");
48 Err(())
49 }
50 }
51}
52
53#[tokio::test]
54async fn test_data_mc0_variation_csv() {
55 crate::utlis::test::init_logger();
56 _ = dbg!(
57 data_mc0_variation_csv("tests/sim.mc0.csv".into())
58 .await
59 .unwrap()
60 );
61}