1use jrsonnet_parser::LocExpr;23pub fn stdlib_expr() -> LocExpr {4 #[cfg(feature = "serialized-stdlib")]5 {6 use bincode::{BincodeRead, DefaultOptions, Options};7 use serde::{Deserialize, Deserializer};89 struct LocDeserializer<R, O: Options> {10 source: Source,11 wrapped: bincode::Deserializer<R, O>,12 }13 macro_rules! delegate {14 ($(fn $name:ident($($arg:ident: $ty:ty),*))+) => {$(15 fn $name<V>(mut self $(, $arg: $ty)*, visitor: V) -> Result<V::Value, Self::Error>16 where V: serde::de::Visitor<'de>,17 {18 self.wrapped.$name($($arg,)* visitor)19 }20 )+};21 }22 impl<'de, R, O> Deserializer<'de> for LocDeserializer<R, O>23 where24 R: BincodeRead<'de>,25 O: Options,26 {27 type Error = <&'de mut bincode::Deserializer<R, O> as Deserializer<'de>>::Error;2829 delegate! {30 fn deserialize_any()31 fn deserialize_bool()32 fn deserialize_u16()33 fn deserialize_u32()34 fn deserialize_u64()35 fn deserialize_i16()36 fn deserialize_i32()37 fn deserialize_i64()38 fn deserialize_f32()39 fn deserialize_f64()40 fn deserialize_u128()41 fn deserialize_i128()42 fn deserialize_u8()43 fn deserialize_i8()44 fn deserialize_unit()45 fn deserialize_char()46 fn deserialize_str()47 fn deserialize_string()48 fn deserialize_bytes()49 fn deserialize_byte_buf()50 fn deserialize_enum(name: &'static str, variants: &'static [&'static str])51 fn deserialize_tuple(len: usize)52 fn deserialize_option()53 fn deserialize_seq()54 fn deserialize_map()55 fn deserialize_struct(name: &'static str, fields: &'static [&'static str])56 fn deserialize_identifier()57 fn deserialize_newtype_struct(name: &'static str)58 fn deserialize_unit_struct(name: &'static str)59 fn deserialize_tuple_struct(name: &'static str, len: usize)60 fn deserialize_ignored_any()61 }6263 fn is_human_readable(&self) -> bool {64 false65 }66 }6768 69 let mut deserializer = bincode::Deserializer::from_slice(70 include_bytes!(concat!(env!("OUT_DIR"), "/stdlib.bincode")),71 DefaultOptions::new()72 .with_fixint_encoding()73 .allow_trailing_bytes(),74 );7576 77 LocExpr::deserialize(&mut deserializer).unwrap()78 }7980 #[cfg(feature = "codegenerated-stdlib")]81 {82 mod structdump_import {83 pub(super) use std::{option::Option, rc::Rc, vec};8485 pub(super) use jrsonnet_parser::*;86 }8788 include!(concat!(env!("OUT_DIR"), "/stdlib.rs"))89 }9091 #[cfg(not(feature = "codegenerated-stdlib"))]92 {93 use jrsonnet_parser::Source;9495 const STDLIB_STR: &str = include_str!("./std.jsonnet");9697 jrsonnet_parser::parse(98 STDLIB_STR,99 &jrsonnet_parser::ParserSettings {100 source: Source::new_virtual("<std>".into(), STDLIB_STR.into()),101 },102 )103 .unwrap()104 }105}