mod sealed {
pub trait Sealed {}
}
pub trait Encoding: sealed::Sealed + 'static {
const NAME: &'static str;
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct FlatBuffers;
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct Proto3;
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct ReprC;
impl sealed::Sealed for FlatBuffers {}
impl sealed::Sealed for Proto3 {}
impl sealed::Sealed for ReprC {}
impl Encoding for FlatBuffers {
const NAME: &'static str = "flatbuffers";
}
impl Encoding for Proto3 {
const NAME: &'static str = "proto3";
}
impl Encoding for ReprC {
const NAME: &'static str = "repr-c";
}
#[cfg(test)]
mod tests {
use super::{sealed, Encoding, FlatBuffers, Proto3, ReprC};
struct Fourth;
impl sealed::Sealed for Fourth {}
impl Encoding for Fourth {
const NAME: &'static str = "fourth";
}
#[test]
fn name_is_the_only_required_item() {
assert_eq!(Fourth::NAME, "fourth");
}
#[test]
fn each_name_is_the_cargo_feature_name() {
assert_eq!(FlatBuffers::NAME, "flatbuffers");
assert_eq!(Proto3::NAME, "proto3");
assert_eq!(ReprC::NAME, "repr-c");
}
}