#![no_std]
#[cfg(feature = "derive")]
pub use struct_to_enum_macros::*;
pub trait FieldNames<const N: usize> {
type FieldName;
fn field_names() -> [Self::FieldName; N];
}
#[cfg(test)]
mod tests {
use crate::FieldNames;
#[derive(Debug, PartialEq, Clone, Copy)]
pub struct Test {
pub a: i32,
pub b: i32,
}
#[derive(Debug, PartialEq, Clone, Copy)]
pub enum TestFieldName {
A,
B,
}
impl FieldNames<2> for Test {
type FieldName = TestFieldName;
fn field_names() -> [Self::FieldName; 2] {
[TestFieldName::A, TestFieldName::B]
}
}
#[test]
pub fn test_field_names() {
let _test = Test { a: 0, b: 0 };
let _a: TestFieldName = <Test as FieldNames<2>>::FieldName::A;
assert_eq!(Test::field_names(), [TestFieldName::A, TestFieldName::B]);
}
}