1pub use sui_field_count_derive::*;
5
6pub trait FieldCount {
8 const FIELD_COUNT: usize;
9}
10
11#[cfg(test)]
12mod tests {
13 use super::*;
14
15 #[test]
16 fn test_basic_field_count() {
17 #[derive(FieldCount)]
18 struct EmptyStruct {}
19 #[derive(FieldCount)]
20 struct BasicStruct {
21 _field1: String,
22 _field2: i32,
23 _field3: bool,
24 }
25
26 assert_eq!(BasicStruct::FIELD_COUNT, 3);
27 assert_eq!(EmptyStruct::FIELD_COUNT, 0);
28 }
29
30 #[test]
31 fn test_lifetime_field_count() {
32 #[derive(FieldCount)]
33 struct LifetimeStruct<'a> {
34 _field1: &'a str,
35 _field2: &'a [u8],
36 _field3: &'a Vec<String>,
37 }
38
39 assert_eq!(LifetimeStruct::FIELD_COUNT, 3);
40 }
41
42 #[test]
43 fn test_generic_type_field_count() {
44 #[derive(FieldCount)]
45 struct GenericStruct<T> {
46 _field1: T,
47 _field2: Vec<T>,
48 _field3: Option<T>,
49 }
50
51 assert_eq!(GenericStruct::<String>::FIELD_COUNT, 3);
52 assert_eq!(GenericStruct::<i32>::FIELD_COUNT, 3);
53 }
54
55 #[test]
56 fn test_where_clause_field_count() {
57 #[derive(FieldCount)]
58 struct WhereStruct<T>
59 where
60 T: Clone,
61 {
62 _field1: T,
63 _field2: Vec<T>,
64 }
65
66 assert_eq!(WhereStruct::<String>::FIELD_COUNT, 2);
67 assert_eq!(WhereStruct::<i32>::FIELD_COUNT, 2);
68 }
69}