1use bincode::serialize;2use jrsonnet_parser::{3 parse, Expr, FieldMember, FieldName, LocExpr, Member, ObjBody, ParserSettings,4};5use jrsonnet_stdlib::STDLIB_STR;6use std::{7 env,8 fs::File,9 io::Write,10 path::{Path, PathBuf},11 rc::Rc,12};1314fn main() {15 let parsed = parse(16 STDLIB_STR,17 &ParserSettings {18 file_name: Rc::new(PathBuf::from("std.jsonnet")),19 loc_data: true,20 },21 )22 .expect("parse");2324 let parsed = if cfg!(feature = "faster") {25 let LocExpr(expr, location) = parsed;26 LocExpr(27 Rc::new(match Rc::try_unwrap(expr).unwrap() {28 Expr::Obj(ObjBody::MemberList(members)) => Expr::Obj(ObjBody::MemberList(29 members30 .into_iter()31 .filter(|p| {32 !matches!(33 p,34 Member::Field(FieldMember {35 name: FieldName::Fixed(name),36 ..37 })38 if name == "join" || name == "manifestJsonEx" ||39 name == "escapeStringJson" || name == "equals" ||40 name == "base64" || name == "foldl" || name == "foldr" ||41 name == "sortImpl" || name == "format" || name == "range" ||42 name == "reverse" || name == "slice" || name == "mod" ||43 name == "strReplace" || name == "map"44 )45 })46 .collect(),47 )),48 _ => panic!("std value should be object"),49 }),50 location,51 )52 } else {53 parsed54 };55 {56 let out_dir = env::var("OUT_DIR").unwrap();57 let dest_path = Path::new(&out_dir).join("stdlib.bincode");58 let mut f = File::create(&dest_path).unwrap();59 f.write_all(&serialize(&parsed).unwrap()).unwrap();60 }61}