diff --git a/Cargo.toml b/Cargo.toml index d9b4edd2..eef8be6e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -46,8 +46,10 @@ harness = false name = "text" path = "benches/encoding/text.rs" harness = false +required-features = [] [[bench]] name = "proto" path = "benches/encoding/proto.rs" harness = false +required-features = ["protobuf"] diff --git a/benches/encoding/proto.rs b/benches/encoding/proto.rs index 068a4d58..4de33a1a 100644 --- a/benches/encoding/proto.rs +++ b/benches/encoding/proto.rs @@ -1,7 +1,9 @@ -// Benchmark inspired by https://github.com/tikv/rust-prometheus/blob/ab1ca7285d3463504381a5025ae1951e020d6796/benches/text_encoder.rs +// Benchmark inspired by +// https://github.com/tikv/rust-prometheus/blob/ab1ca7285d3463504381a5025ae1951e020d6796/benches/text_encoder.rs:write use criterion::{black_box, criterion_group, criterion_main, Criterion}; -use prometheus_client::encoding::proto::{encode, Encode, EncodeMetric}; +use prometheus_client::encoding::proto::{encode, EncodeMetric}; +use prometheus_client::encoding::Encode; use prometheus_client::metrics::counter::Counter; use prometheus_client::metrics::family::Family; use prometheus_client::metrics::histogram::{exponential_buckets, Histogram}; @@ -17,7 +19,7 @@ pub fn proto(c: &mut Criterion) { some_number: u64, } - #[derive(Clone, Hash, PartialEq, Eq)] + #[derive(Clone, Hash, PartialEq, Eq, Encode)] enum Method { Get, #[allow(dead_code)] diff --git a/benches/encoding/text.rs b/benches/encoding/text.rs index 78c2c4f3..fc02b5c8 100644 --- a/benches/encoding/text.rs +++ b/benches/encoding/text.rs @@ -2,6 +2,7 @@ use criterion::{black_box, criterion_group, criterion_main, Criterion}; use prometheus_client::encoding::text::{encode, Encode, EncodeMetric}; +use prometheus_client::encoding::Encode; use prometheus_client::metrics::counter::Counter; use prometheus_client::metrics::family::Family; use prometheus_client::metrics::histogram::{exponential_buckets, Histogram}; @@ -33,6 +34,26 @@ pub fn text(c: &mut Criterion) { Five, } + #[cfg(feature = "protobuf")] + impl std::fmt::Display for Method { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Method::Get => f.write_str("Get"), + Method::Put => f.write_str("Put"), + } + } + } + + #[cfg(feature = "protobuf")] + impl std::fmt::Display for Status { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Status::Two => f.write_str("2"), + Status::Four => f.write_str("4"), + Status::Five => f.write_str("5"), + } + } + } impl Encode for Status { fn encode(&self, writer: &mut dyn Write) -> Result<(), std::io::Error> { let status = match self { diff --git a/derive-encode/src/lib.rs b/derive-encode/src/lib.rs index 7820bba9..e03926b9 100644 --- a/derive-encode/src/lib.rs +++ b/derive-encode/src/lib.rs @@ -61,7 +61,7 @@ pub fn derive_encode(input: TokenStream) -> TokenStream { syn::Data::Union(_) => panic!("Can not derive Encode for union."), }; - let mut gen = quote! { + let gen = quote! { impl prometheus_client::encoding::text::Encode for #name { fn encode(&self, writer: &mut dyn std::io::Write) -> std::result::Result<(), std::io::Error> { #body @@ -71,18 +71,20 @@ pub fn derive_encode(input: TokenStream) -> TokenStream { } }; - if cfg!(feature = "protobuf") { + #[cfg(feature = "protobuf")] + let gen = { let protobuf = derive_protobuf_encode(ast); - gen = quote! { + quote! { #gen #protobuf } - } + }; gen.into() } +#[cfg(feature = "protobuf")] fn derive_protobuf_encode(ast: DeriveInput) -> TokenStream2 { let name = &ast.ident; diff --git a/derive-encode/tests/lib.rs b/derive-encode/tests/lib.rs index 230e9c8e..77bc322f 100644 --- a/derive-encode/tests/lib.rs +++ b/derive-encode/tests/lib.rs @@ -1,4 +1,5 @@ use prometheus_client::encoding::text::{encode, Encode}; +use prometheus_client::encoding::Encode; use prometheus_client::metrics::counter::Counter; use prometheus_client::metrics::family::Family; use prometheus_client::registry::Registry;