1use jrsonnet_parser::LocExpr;23mod structdump_import {4 pub(super) use std::{borrow::Cow, rc::Rc};56 pub(super) use jrsonnet_parser::*;7 pub(super) use vec;8 pub(super) use Option;9}1011pub fn stdlib_expr() -> LocExpr {12 #[cfg(feature = "serialized-stdlib")]13 {14 use bincode::{BincodeRead, DefaultOptions, Options};15 use serde::{Deserialize, Deserializer};1617 struct LocDeserializer<R, O: Options> {18 source: Source,19 wrapped: bincode::Deserializer<R, O>,20 }21 macro_rules! delegate {22 ($(fn $name:ident($($arg:ident: $ty:ty),*))+) => {$(23 fn $name<V>(mut self $(, $arg: $ty)*, visitor: V) -> Result<V::Value, Self::Error>24 where V: serde::de::Visitor<'de>,25 {26 self.wrapped.$name($($arg,)* visitor)27 }28 )+};29 }30 impl<'de, R, O> Deserializer<'de> for LocDeserializer<R, O>31 where32 R: BincodeRead<'de>,33 O: Options,34 {35 type Error = <&'de mut bincode::Deserializer<R, O> as Deserializer<'de>>::Error;3637 delegate! {38 fn deserialize_any()39 fn deserialize_bool()40 fn deserialize_u16()41 fn deserialize_u32()42 fn deserialize_u64()43 fn deserialize_i16()44 fn deserialize_i32()45 fn deserialize_i64()46 fn deserialize_f32()47 fn deserialize_f64()48 fn deserialize_u128()49 fn deserialize_i128()50 fn deserialize_u8()51 fn deserialize_i8()52 fn deserialize_unit()53 fn deserialize_char()54 fn deserialize_str()55 fn deserialize_string()56 fn deserialize_bytes()57 fn deserialize_byte_buf()58 fn deserialize_enum(name: &'static str, variants: &'static [&'static str])59 fn deserialize_tuple(len: usize)60 fn deserialize_option()61 fn deserialize_seq()62 fn deserialize_map()63 fn deserialize_struct(name: &'static str, fields: &'static [&'static str])64 fn deserialize_identifier()65 fn deserialize_newtype_struct(name: &'static str)66 fn deserialize_unit_struct(name: &'static str)67 fn deserialize_tuple_struct(name: &'static str, len: usize)68 fn deserialize_ignored_any()69 }7071 fn is_human_readable(&self) -> bool {72 false73 }74 }7576 77 let mut deserializer = bincode::Deserializer::from_slice(78 include_bytes!(concat!(env!("OUT_DIR"), "/stdlib.bincode")),79 DefaultOptions::new()80 .with_fixint_encoding()81 .allow_trailing_bytes(),82 );8384 85 LocExpr::deserialize(&mut deserializer).unwrap()86 }8788 #[cfg(feature = "codegenerated-stdlib")]89 {90 include!(concat!(env!("OUT_DIR"), "/stdlib.rs"))91 }9293 #[cfg(not(feature = "codegenerated-stdlib"))]94 {95 jrsonnet_parser::parse(96 STDLIB_STR,97 &ParserSettings {98 file_name: Source::new_virtual(Cow::Borrowed("<std>"), STDLIB_STR.into()),99 },100 )101 .unwrap()102 }103}