git.delta.rocks / jrsonnet / refs/commits / de9f0cb0f75a

difftreelog

source

crates/jrsonnet-macros/src/names.rs616 Bsourcehistory
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}