liberty-db 0.2.0

`liberty` data structre
Documentation
//! cargo expand common::demo
use crate::timing::TimingType;

#[derive(Default)]
#[derive(Debug)]
struct Values {
  v: Vec<f64>,
}
impl crate::ast::ComplexAttri for Values {
  type Error=std::num::ParseFloatError;
  #[inline]
  fn parse(v: &Vec<Vec<&str>>)->Result<Self, Self::Error> {
    match v.iter().flatten()
      .map(|s| s.parse())
      .collect() {
      Ok(v) => Ok(Self { v }),
      Err(e) => Err(e),
    }
  }
}
#[derive(Default,Debug)]
#[derive(liberty_macros::Group)]
struct Timing{
  _undefined: crate::ast::UndefinedAttributes,
  #[arrti_type(complex)]
  values: Values,
  #[arrti_type(simple)]
  t1: Option<TimingType>,
  #[arrti_type(simple)]
  t2: Option<TimingType>,
}
#[test]
fn timing_test(){
    let mut n= 1;
    println!("{:?}",<Timing as crate::ast::GroupAttri>::nom_parse(r#"(w){
    t1 : "combinational";
    values ( \
        1,"2,3",4,\ // comment1
        5,\ /* comment2 */
        6\ /* comment3 */
    );
    }
    "#,&mut n));
    println!("{n}");
    println!("{:?}",<Timing as crate::ast::GroupAttri>::nom_parse(r#"(w){
        t1: ombinational;
        t2: combinational;
        values ( \
            1,"2,3,",\
        );
        }
    "#,&mut n));
    println!("{n}");
}

#[test]
fn pin_test(){
    let mut n= 1;
    println!("{:?}",<Pin as crate::ast::GroupAttri>::nom_parse(r#"(A){
        timing(w){
            t1: combinational;
        }
    }
    "#,&mut n));
    println!("{n}");
    println!("{:?}",<Pin as crate::ast::GroupAttri>::nom_parse(r#"(B){
        timing(w){
            t1: combinational;
        }
    }
    "#,&mut n));
    println!("{n}");
}
#[derive(Default,Debug)]
#[derive(liberty_macros::GroupHashed)]
#[derive(liberty_macros::NameIdx)]
struct Pin{
    _undefined: crate::ast::UndefinedAttributes,
    #[arrti_type(group)]
    timing: <Timing as crate::ast::GroupAttri>::Set,
}

#[test]
fn cell_test(){
    let mut n= 1;
    println!("{:?}",<Cell as crate::ast::GroupAttri>::nom_parse(r#"(INV){
      area : 5.4;
        pin(A){
            timing(w){
                t1: combinational;
            }
        }
        pin(Y){
            timing(){
                t1: combinational;
            }
        }
    }
    "#,&mut n));
    println!("{n}");
    println!("{:?}",<Cell as crate::ast::GroupAttri>::nom_parse(r#"(INV){
        pin(C){
            timing(w){
                t1: combinational;
            }
        }
        pin("A"){
            timing(w){
                t1: combinational;
            }
        }
        pin(A,Y){
            timing(w){
                t1: combinational;
            }
        }
    }
    "#,&mut n));
    println!("{n}");
}
#[derive(Default,Debug)]
#[derive(liberty_macros::GroupHashed)]
#[derive(liberty_macros::NameIdx)]
struct Cell{
  _undefined: crate::ast::UndefinedAttributes,
  #[arrti_type(simple)]
  area: Option<f64>,
  #[arrti_type(group_hashed)]
  pin: <Pin as crate::ast::GroupAttri>::Set,
}