macro_rules! backends { ($($name:ident),* $(,)?) => ($( mod $name; pub use self::$name::*; )*) } macro_rules! impl_filetype_backend { ($type:ty, [$($ft:expr),* $(,)?]) => ( impl crate::FiletypeBackend for $type { fn supported_filetypes(&self) -> Vec { vec![$(String::from($ft)),*] } fn as_backend(&self) -> &dyn Backend { self } } ) } backends![bincode, cbor, json, nbt, ron, s_expression, toml, xml, yaml,];