difftreelog
fix build without codegenerated-stdlib feature
in: master
2 files changed
crates/jrsonnet-stdlib/build.rsdiffbeforeafterboth--- a/crates/jrsonnet-stdlib/build.rs
+++ b/crates/jrsonnet-stdlib/build.rs
@@ -1,30 +1,34 @@
-use std::{env, fs::File, io::Write, path::Path};
+fn main() {
+ #[cfg(feature = "codegenerated-stdlib")]
+ {
+ use std::{env, fs::File, io::Write, path::Path};
-use jrsonnet_parser::{parse, ParserSettings, Source};
-use structdump::CodegenResult;
+ use jrsonnet_parser::{parse, ParserSettings, Source};
+ use structdump::CodegenResult;
-fn main() {
- let parsed = parse(
- include_str!("./src/std.jsonnet"),
- &ParserSettings {
- source: Source::new_virtual("<std>".into(), include_str!("./src/std.jsonnet").into()),
- },
- )
- .expect("parse");
+ let parsed = parse(
+ include_str!("./src/std.jsonnet"),
+ &ParserSettings {
+ source: Source::new_virtual(
+ "<std>".into(),
+ include_str!("./src/std.jsonnet").into(),
+ ),
+ },
+ )
+ .expect("parse");
- let mut out = CodegenResult::default();
+ let mut out = CodegenResult::default();
- let v = out.codegen(&parsed, true);
+ let v = out.codegen(&parsed, true);
- {
- let out_dir = env::var("OUT_DIR").unwrap();
- let dest_path = Path::new(&out_dir).join("stdlib.rs");
- let mut f = File::create(dest_path).unwrap();
- f.write_all(
- ("#[allow(clippy::redundant_clone)]".to_owned() + &v.to_string())
- .replace(';', ";\n")
- .as_bytes(),
- )
- .unwrap();
+ {
+ let out_dir = env::var("OUT_DIR").unwrap();
+ let dest_path = Path::new(&out_dir).join("stdlib.rs");
+ let mut f = File::create(dest_path).unwrap();
+ f.write_all(
+ ("#[allow(clippy::redundant_clone)]".to_owned() + &v.to_string()).as_bytes(),
+ )
+ .unwrap();
+ }
}
}
crates/jrsonnet-stdlib/src/expr.rsdiffbeforeafterboth1use jrsonnet_parser::LocExpr;23mod structdump_import {4 pub(super) use std::{option::Option, rc::Rc, vec};56 pub(super) use jrsonnet_parser::*;7}89pub fn stdlib_expr() -> LocExpr {10 #[cfg(feature = "serialized-stdlib")]11 {12 use bincode::{BincodeRead, DefaultOptions, Options};13 use serde::{Deserialize, Deserializer};1415 struct LocDeserializer<R, O: Options> {16 source: Source,17 wrapped: bincode::Deserializer<R, O>,18 }19 macro_rules! delegate {20 ($(fn $name:ident($($arg:ident: $ty:ty),*))+) => {$(21 fn $name<V>(mut self $(, $arg: $ty)*, visitor: V) -> Result<V::Value, Self::Error>22 where V: serde::de::Visitor<'de>,23 {24 self.wrapped.$name($($arg,)* visitor)25 }26 )+};27 }28 impl<'de, R, O> Deserializer<'de> for LocDeserializer<R, O>29 where30 R: BincodeRead<'de>,31 O: Options,32 {33 type Error = <&'de mut bincode::Deserializer<R, O> as Deserializer<'de>>::Error;3435 delegate! {36 fn deserialize_any()37 fn deserialize_bool()38 fn deserialize_u16()39 fn deserialize_u32()40 fn deserialize_u64()41 fn deserialize_i16()42 fn deserialize_i32()43 fn deserialize_i64()44 fn deserialize_f32()45 fn deserialize_f64()46 fn deserialize_u128()47 fn deserialize_i128()48 fn deserialize_u8()49 fn deserialize_i8()50 fn deserialize_unit()51 fn deserialize_char()52 fn deserialize_str()53 fn deserialize_string()54 fn deserialize_bytes()55 fn deserialize_byte_buf()56 fn deserialize_enum(name: &'static str, variants: &'static [&'static str])57 fn deserialize_tuple(len: usize)58 fn deserialize_option()59 fn deserialize_seq()60 fn deserialize_map()61 fn deserialize_struct(name: &'static str, fields: &'static [&'static str])62 fn deserialize_identifier()63 fn deserialize_newtype_struct(name: &'static str)64 fn deserialize_unit_struct(name: &'static str)65 fn deserialize_tuple_struct(name: &'static str, len: usize)66 fn deserialize_ignored_any()67 }6869 fn is_human_readable(&self) -> bool {70 false71 }72 }7374 // In build.rs, Source object is populated with empty values, deserializer wrapper loads correct values on deserialize75 let mut deserializer = bincode::Deserializer::from_slice(76 include_bytes!(concat!(env!("OUT_DIR"), "/stdlib.bincode")),77 DefaultOptions::new()78 .with_fixint_encoding()79 .allow_trailing_bytes(),80 );8182 // Should not panic, stdlib.bincode is generated in build.rs83 LocExpr::deserialize(&mut deserializer).unwrap()84 }8586 #[cfg(feature = "codegenerated-stdlib")]87 {88 include!(concat!(env!("OUT_DIR"), "/stdlib.rs"))89 }9091 #[cfg(not(feature = "codegenerated-stdlib"))]92 {93 jrsonnet_parser::parse(94 STDLIB_STR,95 &ParserSettings {96 file_name: Source::new_virtual(Cow::Borrowed("<std>"), STDLIB_STR.into()),97 },98 )99 .unwrap()100 }101}