1use proc_macro2::TokenStream;2use quote::quote;34#[derive(Default)]5pub struct Names {6 names: Vec<String>,7}89impl Names {10 pub fn intern(&mut self, s: impl AsRef<str>) -> usize {11 let s = s.as_ref();12 if let Some(pos) = self.names.iter().position(|v| v == s) {13 return pos;14 }15 let pos = self.names.len();16 self.names.push(s.to_owned());17 pos18 }1920 pub fn expand(&self) -> TokenStream {21 let len = self.names.len();22 let name = self.names.iter();23 quote! {24 thread_local! {25 static NAMES: [::jrsonnet_evaluator::IStr; #len] = [26 #(::jrsonnet_evaluator::IStr::from(#name),)*27 ];28 }29 }30 }31}