git.delta.rocks / jrsonnet / refs/commits / 6db420cedf84

difftreelog

source

crates/jsonnet-evaluator/build.rs1.2 KiBsourcehistory
1use bincode::serialize;2use jsonnet_parser::{3	parse, Expr, FieldMember, FieldName, LocExpr, Member, ObjBody, ParserSettings,4};5use jsonnet_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								}) if **name == *"join" || **name == *"manifestJsonEx" || **name == *"escapeStringJson"38							)39						})40						.collect(),41				)),42				_ => panic!("std value should be object"),43			}),44			location,45		)46	} else {47		parsed48	};4950	let out_dir = env::var("OUT_DIR").unwrap();51	let dest_path = Path::new(&out_dir).join("stdlib.bincode");52	let mut f = File::create(&dest_path).unwrap();53	f.write_all(&serialize(&parsed).expect("serialize"))54		.unwrap();55}