Skip to main content

wolfram_expr/
wxf.rs

1//! WXF wire-format enums, re-exported from [`wolfram_serialize`], plus the
2//! [`ArrayElement`] impls that map Rust primitives to element-type tags.
3//!
4//! The enum definitions live in the dependency-free `wolfram-serialize` crate; they
5//! are re-exported here so existing paths (`wolfram_expr::wxf::ExpressionEnum`,
6//! `wolfram_expr::NumericArrayEnum`, …) keep resolving.
7
8pub use wolfram_serialize::constants::{
9    ExpressionEnum, HeaderEnum, NumericArrayEnum, PackedArrayEnum,
10};
11
12use crate::array_buf::ArrayElement;
13use crate::complex::{Complex32, Complex64};
14
15//======================================
16// ArrayElement impls — Rust primitive → enum variant
17// Single source of truth for both NumericArrayEnum and PackedArrayEnum.
18//======================================
19
20impl ArrayElement<NumericArrayEnum> for i8 {
21    const TAG: NumericArrayEnum = NumericArrayEnum::Integer8;
22}
23impl ArrayElement<NumericArrayEnum> for i16 {
24    const TAG: NumericArrayEnum = NumericArrayEnum::Integer16;
25}
26impl ArrayElement<NumericArrayEnum> for i32 {
27    const TAG: NumericArrayEnum = NumericArrayEnum::Integer32;
28}
29impl ArrayElement<NumericArrayEnum> for i64 {
30    const TAG: NumericArrayEnum = NumericArrayEnum::Integer64;
31}
32impl ArrayElement<NumericArrayEnum> for u8 {
33    const TAG: NumericArrayEnum = NumericArrayEnum::UnsignedInteger8;
34}
35impl ArrayElement<NumericArrayEnum> for u16 {
36    const TAG: NumericArrayEnum = NumericArrayEnum::UnsignedInteger16;
37}
38impl ArrayElement<NumericArrayEnum> for u32 {
39    const TAG: NumericArrayEnum = NumericArrayEnum::UnsignedInteger32;
40}
41impl ArrayElement<NumericArrayEnum> for u64 {
42    const TAG: NumericArrayEnum = NumericArrayEnum::UnsignedInteger64;
43}
44impl ArrayElement<NumericArrayEnum> for f32 {
45    const TAG: NumericArrayEnum = NumericArrayEnum::Real32;
46}
47impl ArrayElement<NumericArrayEnum> for f64 {
48    const TAG: NumericArrayEnum = NumericArrayEnum::Real64;
49}
50impl ArrayElement<NumericArrayEnum> for Complex32 {
51    const TAG: NumericArrayEnum = NumericArrayEnum::ComplexReal32;
52}
53impl ArrayElement<NumericArrayEnum> for Complex64 {
54    const TAG: NumericArrayEnum = NumericArrayEnum::ComplexReal64;
55}
56
57impl ArrayElement<PackedArrayEnum> for i8 {
58    const TAG: PackedArrayEnum = PackedArrayEnum::Integer8;
59}
60impl ArrayElement<PackedArrayEnum> for i16 {
61    const TAG: PackedArrayEnum = PackedArrayEnum::Integer16;
62}
63impl ArrayElement<PackedArrayEnum> for i32 {
64    const TAG: PackedArrayEnum = PackedArrayEnum::Integer32;
65}
66impl ArrayElement<PackedArrayEnum> for i64 {
67    const TAG: PackedArrayEnum = PackedArrayEnum::Integer64;
68}
69impl ArrayElement<PackedArrayEnum> for f32 {
70    const TAG: PackedArrayEnum = PackedArrayEnum::Real32;
71}
72impl ArrayElement<PackedArrayEnum> for f64 {
73    const TAG: PackedArrayEnum = PackedArrayEnum::Real64;
74}
75impl ArrayElement<PackedArrayEnum> for Complex32 {
76    const TAG: PackedArrayEnum = PackedArrayEnum::ComplexReal32;
77}
78impl ArrayElement<PackedArrayEnum> for Complex64 {
79    const TAG: PackedArrayEnum = PackedArrayEnum::ComplexReal64;
80}