From 8719ea0b7fac77846c5882ac64f3dc7136089b66 Mon Sep 17 00:00:00 2001 From: Robert Debug Date: Mon, 10 Aug 2020 18:03:27 +0200 Subject: [PATCH] remove metrics feature from macro --- rust/Cargo.lock | 4 +- rust/Cargo.toml | 2 +- rust/xaynet-metrics-macro/Cargo.toml | 5 +- rust/xaynet-metrics-macro/src/lib.rs | 81 +++++++++++++--------------- 4 files changed, 41 insertions(+), 51 deletions(-) diff --git a/rust/Cargo.lock b/rust/Cargo.lock index 063b423d6..700623cd2 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -1953,9 +1953,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.37" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "239f255b9e3429350f188c27b807fc9920a15eb9145230ff1a7d054c08fec319" +checksum = "e69abc24912995b3038597a7a593be5053eb0fb44f3cc5beec0deb421790c1f4" dependencies = [ "proc-macro2", "quote", diff --git a/rust/Cargo.toml b/rust/Cargo.toml index e386c8ec9..53cc57d5e 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -60,4 +60,4 @@ path = "src/bin/main.rs" [features] default = ["reqwest/default-tls"] rustls = ["reqwest/rustls-tls"] -metrics = ["influxdb", "chrono", "xaynet-metrics-macro/metrics"] +metrics = ["influxdb", "chrono"] diff --git a/rust/xaynet-metrics-macro/Cargo.toml b/rust/xaynet-metrics-macro/Cargo.toml index 274df6303..632cc249e 100644 --- a/rust/xaynet-metrics-macro/Cargo.toml +++ b/rust/xaynet-metrics-macro/Cargo.toml @@ -5,11 +5,8 @@ authors = ["Xayn Engineering "] edition = "2018" [dependencies] -syn = "1.0.37" +syn = "1.0.38" quote = "1.0" [lib] proc-macro = true - -[features] -metrics = [] diff --git a/rust/xaynet-metrics-macro/src/lib.rs b/rust/xaynet-metrics-macro/src/lib.rs index 7fc22a660..02f5b964b 100644 --- a/rust/xaynet-metrics-macro/src/lib.rs +++ b/rust/xaynet-metrics-macro/src/lib.rs @@ -1,60 +1,53 @@ extern crate proc_macro; -use proc_macro::TokenStream; -#[cfg(feature = "metrics")] -pub(crate) mod metric { - use syn::{ - parse::{Parse, ParseStream, Result}, - Expr, - Token, - }; - pub struct Send { - pub sender: Expr, - pub metrics: Vec, - } +use proc_macro::TokenStream; +use quote::quote; +use syn::{ + parse::{Parse, ParseStream, Result}, + parse_macro_input, + Expr, + Token, +}; +struct Send { + sender: Expr, + metrics: Vec, +} - impl Parse for Send { - fn parse(input: ParseStream) -> Result { - // metrics!(expr, expr); - let sender = input.parse()?; // expr - let mut metrics = Vec::new(); +impl Parse for Send { + fn parse(input: ParseStream) -> Result { + // metrics!(sender, metric); + let sender = input.parse()?; // expr + let mut metrics = Vec::new(); + + // at least one metric is required + input.parse::()?; // , + let metric = input.parse()?; // expr + metrics.push(metric); + + // metrics!(sender, metric, metric, ...); + loop { + if input.is_empty() { + break; + } - // at least one metric is required input.parse::()?; // , let metric = input.parse()?; // expr - metrics.push(metric); - - loop { - if input.is_empty() { - break; - } - - input.parse::()?; // , - let metric = input.parse()?; // expr - metrics.push(metric); - } - - Ok(Send { sender, metrics }) + metrics.push(metric); } + + Ok(Send { sender, metrics }) } } -#[allow(unused_variables)] #[proc_macro] pub fn metrics(input: TokenStream) -> TokenStream { - #[cfg(not(feature = "metrics"))] - return TokenStream::new(); + let Send { sender, metrics } = parse_macro_input!(input as Send); - #[cfg(feature = "metrics")] - { - use quote::quote; - use syn::parse_macro_input; - let metric::Send { sender, metrics } = parse_macro_input!(input as metric::Send); - - let gen = quote! { + TokenStream::from(quote! { + #[cfg(feature = "metrics")] + { #(#sender.send(#metrics);)* - }; - gen.into() - } + } + }) }