git.delta.rocks / jrsonnet / refs/commits / 959933eb18e2

difftreelog

source

crates/jrsonnet-evaluator/build.rs1.5 KiBsourcehistory
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}