Skip to content
This repository has been archived by the owner on Aug 30, 2022. It is now read-only.

Commit

Permalink
remove metrics feature from macro
Browse files Browse the repository at this point in the history
  • Loading branch information
Robert-Steiner committed Aug 10, 2020
1 parent 3ee8a52 commit 8719ea0
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 51 deletions.
4 changes: 2 additions & 2 deletions rust/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion rust/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"]
5 changes: 1 addition & 4 deletions rust/xaynet-metrics-macro/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,8 @@ authors = ["Xayn Engineering <engineering@xaynet.dev>"]
edition = "2018"

[dependencies]
syn = "1.0.37"
syn = "1.0.38"
quote = "1.0"

[lib]
proc-macro = true

[features]
metrics = []
81 changes: 37 additions & 44 deletions rust/xaynet-metrics-macro/src/lib.rs
Original file line number Diff line number Diff line change
@@ -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<Expr>,
}
use proc_macro::TokenStream;
use quote::quote;
use syn::{
parse::{Parse, ParseStream, Result},
parse_macro_input,
Expr,
Token,
};
struct Send {
sender: Expr,
metrics: Vec<Expr>,
}

impl Parse for Send {
fn parse(input: ParseStream) -> Result<Self> {
// metrics!(expr, expr);
let sender = input.parse()?; // expr
let mut metrics = Vec::new();
impl Parse for Send {
fn parse(input: ParseStream) -> Result<Self> {
// metrics!(sender, metric);
let sender = input.parse()?; // expr
let mut metrics = Vec::new();

// at least one metric is required
input.parse::<Token![,]>()?; // ,
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::<Token![,]>()?; // ,
let metric = input.parse()?; // expr
metrics.push(metric);

loop {
if input.is_empty() {
break;
}

input.parse::<Token![,]>()?; // ,
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()
}
}
})
}

0 comments on commit 8719ea0

Please sign in to comment.