use crate::ValueBytesCodecDescriptor;
use crate::ValueCodecId;
use crate::ValueCodecRegistrationSource;
use crate::ValueStringCodecDescriptor;
#[derive(Clone, Copy, Debug)]
pub struct ValueCodecRegistration<D: 'static> {
id: ValueCodecId,
descriptor: &'static D,
source: ValueCodecRegistrationSource,
}
pub type ValueStringCodecRegistration = ValueCodecRegistration<ValueStringCodecDescriptor>;
pub type ValueBytesCodecRegistration = ValueCodecRegistration<ValueBytesCodecDescriptor>;
impl<D: 'static> ValueCodecRegistration<D> {
#[doc(hidden)]
#[inline]
#[must_use]
pub const fn new(id: ValueCodecId, descriptor: &'static D, source: ValueCodecRegistrationSource) -> Self {
Self { id, descriptor, source }
}
#[inline]
#[must_use]
pub const fn id(&self) -> ValueCodecId {
self.id
}
#[inline]
#[must_use]
pub const fn descriptor(&self) -> &'static D {
self.descriptor
}
#[inline]
#[must_use]
pub const fn source(&self) -> ValueCodecRegistrationSource {
self.source
}
}
#[macro_export]
macro_rules! register_value_string_codec {
(id = $id:expr, codec = $codec:ty, value = $value:ty $(,)?) => {
const _: () = {
static DESCRIPTOR: $crate::ValueStringCodecDescriptor =
$crate::ValueStringCodecDescriptor::of::<$codec, $value>();
fn registration() -> $crate::ValueStringCodecRegistration {
$crate::ValueCodecRegistration::new(
$crate::ValueCodecId::new($id),
&DESCRIPTOR,
$crate::ValueCodecRegistrationSource::new(env!("CARGO_PKG_NAME"), module_path!(), file!(), line!()),
)
}
$crate::__private::inventory::submit! {
$crate::ValueStringCodecRegistrationFactory(registration)
}
};
};
}
#[macro_export]
macro_rules! register_value_bytes_codec {
(id = $id:expr, codec = $codec:ty, value = $value:ty $(,)?) => {
const _: () = {
static DESCRIPTOR: $crate::ValueBytesCodecDescriptor =
$crate::ValueBytesCodecDescriptor::of::<$codec, $value>();
fn registration() -> $crate::ValueBytesCodecRegistration {
$crate::ValueCodecRegistration::new(
$crate::ValueCodecId::new($id),
&DESCRIPTOR,
$crate::ValueCodecRegistrationSource::new(env!("CARGO_PKG_NAME"), module_path!(), file!(), line!()),
)
}
$crate::__private::inventory::submit! {
$crate::ValueBytesCodecRegistrationFactory(registration)
}
};
};
}