From 62970fd2010b01260cf45a1f2a6a582c6a8c0c12 Mon Sep 17 00:00:00 2001 From: Nadrieril Date: Sun, 31 Mar 2019 21:04:10 +0200 Subject: Make Expr generic in Label --- dhall_generator/src/dhall_expr.rs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'dhall_generator/src/dhall_expr.rs') diff --git a/dhall_generator/src/dhall_expr.rs b/dhall_generator/src/dhall_expr.rs index 96201e8..b057850 100644 --- a/dhall_generator/src/dhall_expr.rs +++ b/dhall_generator/src/dhall_expr.rs @@ -17,17 +17,20 @@ pub fn dhall_expr(input: proc_macro::TokenStream) -> proc_macro::TokenStream { // Returns an expression of type ExprF, where T is the // type of the subexpressions after interpolation. -pub fn quote_expr(expr: ExprF) -> TokenStream +pub fn quote_expr(expr: ExprF) -> TokenStream where TS: quote::ToTokens + std::fmt::Debug, { let quote_map = |m: BTreeMap| -> TokenStream { - let (keys, values): (Vec, Vec) = - m.into_iter().map(|(k, v)| (quote_label(&k), v)).unzip(); + let entries = + m.into_iter().map(|(k, v)| { + let k = quote_label(&k); + quote!(m.insert(#k, #v);) + }); quote! { { use std::collections::BTreeMap; let mut m = BTreeMap::new(); - #( m.insert(#keys, #values); )* + #( #entries )* m } } }; @@ -151,7 +154,7 @@ fn quote_binop(b: BinOp) -> TokenStream { fn quote_label(l: &Label) -> TokenStream { let l = String::from(l); - quote! { #l.into() } + quote! { dhall_core::Label::from(#l) } } fn bx(x: TokenStream) -> TokenStream { -- cgit v1.2.3