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
8#![allow(missing_docs)]
9
10pub use wolfram_serialize::constants::{
11    ExpressionEnum, HeaderEnum, NumericArrayEnum, PackedArrayEnum,
12};
13
14use crate::array_buf::ArrayElement;
15use crate::complex::{Complex32, Complex64};
16
17//======================================
18// ArrayElement impls — Rust primitive → enum variant
19// Single source of truth for both NumericArrayEnum and PackedArrayEnum.
20//======================================
21
22impl ArrayElement<NumericArrayEnum> for i8 {
23    const TAG: NumericArrayEnum = NumericArrayEnum::Integer8;
24}
25impl ArrayElement<NumericArrayEnum> for i16 {
26    const TAG: NumericArrayEnum = NumericArrayEnum::Integer16;
27}
28impl ArrayElement<NumericArrayEnum> for i32 {
29    const TAG: NumericArrayEnum = NumericArrayEnum::Integer32;
30}
31impl ArrayElement<NumericArrayEnum> for i64 {
32    const TAG: NumericArrayEnum = NumericArrayEnum::Integer64;
33}
34impl ArrayElement<NumericArrayEnum> for u8 {
35    const TAG: NumericArrayEnum = NumericArrayEnum::UnsignedInteger8;
36}
37impl ArrayElement<NumericArrayEnum> for u16 {
38    const TAG: NumericArrayEnum = NumericArrayEnum::UnsignedInteger16;
39}
40impl ArrayElement<NumericArrayEnum> for u32 {
41    const TAG: NumericArrayEnum = NumericArrayEnum::UnsignedInteger32;
42}
43impl ArrayElement<NumericArrayEnum> for u64 {
44    const TAG: NumericArrayEnum = NumericArrayEnum::UnsignedInteger64;
45}
46impl ArrayElement<NumericArrayEnum> for f32 {
47    const TAG: NumericArrayEnum = NumericArrayEnum::Real32;
48}
49impl ArrayElement<NumericArrayEnum> for f64 {
50    const TAG: NumericArrayEnum = NumericArrayEnum::Real64;
51}
52impl ArrayElement<NumericArrayEnum> for Complex32 {
53    const TAG: NumericArrayEnum = NumericArrayEnum::ComplexReal32;
54}
55impl ArrayElement<NumericArrayEnum> for Complex64 {
56    const TAG: NumericArrayEnum = NumericArrayEnum::ComplexReal64;
57}
58
59impl ArrayElement<PackedArrayEnum> for i8 {
60    const TAG: PackedArrayEnum = PackedArrayEnum::Integer8;
61}
62impl ArrayElement<PackedArrayEnum> for i16 {
63    const TAG: PackedArrayEnum = PackedArrayEnum::Integer16;
64}
65impl ArrayElement<PackedArrayEnum> for i32 {
66    const TAG: PackedArrayEnum = PackedArrayEnum::Integer32;
67}
68impl ArrayElement<PackedArrayEnum> for i64 {
69    const TAG: PackedArrayEnum = PackedArrayEnum::Integer64;
70}
71impl ArrayElement<PackedArrayEnum> for f32 {
72    const TAG: PackedArrayEnum = PackedArrayEnum::Real32;
73}
74impl ArrayElement<PackedArrayEnum> for f64 {
75    const TAG: PackedArrayEnum = PackedArrayEnum::Real64;
76}
77impl ArrayElement<PackedArrayEnum> for Complex32 {
78    const TAG: PackedArrayEnum = PackedArrayEnum::ComplexReal32;
79}
80impl ArrayElement<PackedArrayEnum> for Complex64 {
81    const TAG: PackedArrayEnum = PackedArrayEnum::ComplexReal64;
82}