use crate::error::Result;
pub trait UnknownValueEncoder {
fn encode_i32(&mut self, value: i32) -> Result<()>;
fn encode_i64(&mut self, value: i64) -> Result<()>;
fn encode_isize(&mut self, value: isize) -> Result<()>;
fn encode_u32(&mut self, value: u32) -> Result<()>;
fn encode_f32(&mut self, value: f32) -> Result<()>;
fn encode_f64(&mut self, value: f64) -> Result<()>;
}
pub trait EncodeUnknownValue {
fn encode(&self, encoder: &mut dyn UnknownValueEncoder) -> Result<()>;
}
macro_rules! impl_encode_unknown_value {
($($value:ty),*) => (
paste::paste! { $(
impl EncodeUnknownValue for $value {
fn encode(&self, encoder: &mut dyn UnknownValueEncoder) -> Result<()> {
encoder.[<encode_ $value>](*self)
}
}
)* }
)
}
impl_encode_unknown_value! { i32, i64, isize, u32, f32, f64 }
pub trait GaugeValueEncoder {
fn encode_i32(&mut self, value: i32) -> Result<()>;
fn encode_i64(&mut self, value: i64) -> Result<()>;
fn encode_isize(&mut self, value: isize) -> Result<()>;
fn encode_f32(&mut self, value: f32) -> Result<()>;
fn encode_f64(&mut self, value: f64) -> Result<()>;
}
pub trait EncodeGaugeValue {
fn encode(&self, encoder: &mut dyn GaugeValueEncoder) -> Result<()>;
}
macro_rules! impl_encode_gauge_value {
($($value:ty),*) => (
paste::paste! { $(
impl EncodeGaugeValue for $value {
fn encode(&self, encoder: &mut dyn GaugeValueEncoder) -> Result<()> {
encoder.[<encode_ $value>](*self)
}
}
)* }
)
}
impl_encode_gauge_value! { i32, i64, isize, f32, f64 }
pub trait CounterValueEncoder {
fn encode_u32(&mut self, value: u32) -> Result<()>;
fn encode_u64(&mut self, value: u64) -> Result<()>;
fn encode_usize(&mut self, value: usize) -> Result<()>;
fn encode_f32(&mut self, value: f32) -> Result<()>;
fn encode_f64(&mut self, value: f64) -> Result<()>;
}
pub trait EncodeCounterValue {
fn encode(&self, encoder: &mut dyn CounterValueEncoder) -> Result<()>;
}
macro_rules! impl_encode_counter_value {
($($value:ty),*) => (
paste::paste! { $(
impl EncodeCounterValue for $value {
fn encode(&self, encoder: &mut dyn CounterValueEncoder) -> Result<()> {
encoder.[<encode_ $value>](*self)
}
}
)* }
)
}
impl_encode_counter_value! { u32, u64, usize, f32, f64 }