For Container<T>
, the container implements the trait by forwarding to the implementation for T
if T
also implements that trait
ACTDIH5ITLHHUZES5JBBQJLOEFYJ6ONBRYWY2QWJLMNY52JMXEKQC
HHJDRLLNN36UNIA7STAXEEVBCEMPJNB7SJQOS3TJLLYN4AEZ4MHQC
BFL2Y7GN6NBXXNAUSD4M6T6CIVQ2OLERPE2CAFSLRF377WFFTVCQC
7M4UI3TWQIAA333GQ577HDWDWZPSZKWCYG556L6SBRLB6SZDQYPAC
AE3AZFVKJBURLY6T6H5477BSP5LISUQYPSPDRSPXRO435KGYTRZAC
S26YOXQIUO3B7FCWZ33RI54OHFVXUDSFKBMVAAND3BW3H5WRGNRAC
RUCC2HKZZTUHN3G6IWS4NK3VYGXAI6PORJH2YZKPRAYSDWH63ESQC
2HHBS7VWRQRDNDCCSV3BJJJHA7LGN3L4CMKIP7URWQFXPI6QFNDQC
LYOV6ZIRUE34ZJG6X6BVPZ6R4LLHLMMWC5FHVLGW73HIHQUHDJYQC
RA3H7PWCI7WHONXB32IWYECQ3VKPKEXXYAJDIOHWNAGHDO7L5ZLQC
DJH52CL34NRGNCOD27PO2ZZ7QC6TBL5GAZKY2A5FLX55VJJU3ELQC
VZYZRAO4EXCHW2LBVFG5ELSWG5SCNDREMJ6RKQ4EKQGI2T7SD3ZQC
UKFEFT6LSI4K7X6UHQFZYD52DILKXMZMYSO2UYS2FCHNPXIF4BEQC
macro_rules! impl_serialize {
// Handle no extra const generics
($container:ident, $field_name:ident) => {
impl_serialize!($container, $field_name,);
};
($container:ident, $field_name:ident, $($const_name:ident: $const_type:ty),*) => {
impl<M: crate::Localize + serde::Serialize, $(const $const_name: $const_type),*> serde::Serialize for $container<M, $($const_name),*> {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
self.$field_name.serialize(serializer)
}
}
// impl<M: crate::Localize + std::fmt::Debug, $(const $const_name: $const_type),*> std::fmt::Debug for $container<M, $($const_name),*> {
// fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
// self.$field_name.fmt(f)
// }
// }
};
}
// Re-export the macro so other modules can use it
pub(crate) use impl_serialize;
impl_serialize!(AndList, messages);
impl_serialize!(OrList, messages);
impl_serialize!(UnitList, messages);