facet_reflect/
scalar.rs

1//! Re-export of [`ScalarType`] from `facet_core`.
2//!
3//! This module re-exports scalar type functionality from `facet_core` for backwards
4//! compatibility. New code should import directly from `facet_core`.
5
6pub use facet_core::ScalarType;
7
8#[cfg(test)]
9mod tests {
10    use super::*;
11
12    use core::net::{IpAddr, Ipv4Addr, Ipv6Addr};
13
14    use facet_core::{ConstTypeId, Facet};
15
16    /// Simple check to ensure every scalar type can be loaded from a shape.
17    #[test]
18    fn test_ensure_try_from_shape() {
19        assert_eq!(
20            ScalarType::Unit,
21            ScalarType::try_from_shape(<()>::SHAPE).unwrap()
22        );
23        assert_eq!(
24            ScalarType::Bool,
25            ScalarType::try_from_shape(bool::SHAPE).unwrap()
26        );
27        assert_eq!(
28            ScalarType::Str,
29            ScalarType::try_from_shape(<&str>::SHAPE).unwrap()
30        );
31        #[cfg(feature = "std")]
32        assert_eq!(
33            ScalarType::String,
34            ScalarType::try_from_shape(String::SHAPE).unwrap()
35        );
36        #[cfg(feature = "std")]
37        assert_eq!(
38            ScalarType::CowStr,
39            ScalarType::try_from_shape(alloc::borrow::Cow::<str>::SHAPE).unwrap()
40        );
41        assert_eq!(
42            ScalarType::F32,
43            ScalarType::try_from_shape(f32::SHAPE).unwrap()
44        );
45        assert_eq!(
46            ScalarType::F64,
47            ScalarType::try_from_shape(f64::SHAPE).unwrap()
48        );
49        assert_eq!(
50            ScalarType::U8,
51            ScalarType::try_from_shape(u8::SHAPE).unwrap()
52        );
53        assert_eq!(
54            ScalarType::U16,
55            ScalarType::try_from_shape(u16::SHAPE).unwrap()
56        );
57        assert_eq!(
58            ScalarType::U32,
59            ScalarType::try_from_shape(u32::SHAPE).unwrap()
60        );
61        assert_eq!(
62            ScalarType::U64,
63            ScalarType::try_from_shape(u64::SHAPE).unwrap()
64        );
65        assert_eq!(
66            ScalarType::U128,
67            ScalarType::try_from_shape(u128::SHAPE).unwrap()
68        );
69        assert_eq!(
70            ScalarType::USize,
71            ScalarType::try_from_shape(usize::SHAPE).unwrap()
72        );
73        assert_eq!(
74            ScalarType::I8,
75            ScalarType::try_from_shape(i8::SHAPE).unwrap()
76        );
77        assert_eq!(
78            ScalarType::I16,
79            ScalarType::try_from_shape(i16::SHAPE).unwrap()
80        );
81        assert_eq!(
82            ScalarType::I32,
83            ScalarType::try_from_shape(i32::SHAPE).unwrap()
84        );
85        assert_eq!(
86            ScalarType::I64,
87            ScalarType::try_from_shape(i64::SHAPE).unwrap()
88        );
89        assert_eq!(
90            ScalarType::I128,
91            ScalarType::try_from_shape(i128::SHAPE).unwrap()
92        );
93        assert_eq!(
94            ScalarType::ISize,
95            ScalarType::try_from_shape(isize::SHAPE).unwrap()
96        );
97        assert_eq!(
98            ScalarType::SocketAddr,
99            ScalarType::try_from_shape(core::net::SocketAddr::SHAPE).unwrap()
100        );
101        assert_eq!(
102            ScalarType::IpAddr,
103            ScalarType::try_from_shape(IpAddr::SHAPE).unwrap()
104        );
105        assert_eq!(
106            ScalarType::Ipv4Addr,
107            ScalarType::try_from_shape(Ipv4Addr::SHAPE).unwrap()
108        );
109        assert_eq!(
110            ScalarType::Ipv6Addr,
111            ScalarType::try_from_shape(Ipv6Addr::SHAPE).unwrap()
112        );
113        assert_eq!(
114            ScalarType::ConstTypeId,
115            ScalarType::try_from_shape(ConstTypeId::SHAPE).unwrap()
116        );
117    }
118
119    /// Test that Shape::scalar_type() method works correctly
120    #[test]
121    fn test_shape_scalar_type_method() {
122        assert_eq!(bool::SHAPE.scalar_type(), Some(ScalarType::Bool));
123        assert_eq!(u32::SHAPE.scalar_type(), Some(ScalarType::U32));
124        assert_eq!(f64::SHAPE.scalar_type(), Some(ScalarType::F64));
125        assert_eq!(<()>::SHAPE.scalar_type(), Some(ScalarType::Unit));
126
127        #[cfg(feature = "std")]
128        assert_eq!(String::SHAPE.scalar_type(), Some(ScalarType::String));
129
130        // Test non-scalar types return None
131        assert_eq!(alloc::vec::Vec::<u8>::SHAPE.scalar_type(), None);
132    }
133}