Wolfram Exchange Format with Rust
Design
To support format conversion, just implement the ToWolfram trait.
pub trait ToWolfram {
fn to_wolfram(&self) -> WolframValue;
fn to_wolfram_string(&self) -> String {self.to_wolfram().to_string()}
fn to_wolfram_bytes(&self) -> Vec<u8> {self.to_wolfram().to_bytes()}
fn to_wolfram_solid(&self) -> Vec<u8> {self.to_wolfram().to_compressed()}
}
WolframValue consists of the following legal elements:
pub enum WolframValue {
Boolean(bool),
Function(Box<str>, Vec<WolframValue>),
String(Box<str>),
Bytes(Vec<u8>),
Symbol(Box<str>),
Integer8(i8),
Integer16(i16),
Integer32(i32),
Integer64(i64),
BigInteger(BigInt),
Decimal64([u8; 8]),
BigDecimal(Box<str>),
PackedArray(Vec<WolframValue>),
NumericArray(Vec<WolframValue>),
Association(BTreeMap<WolframValue, (WolframValue, WolframValue)>),
Rule,
RuleDelayed,
}
Extension
Here are some common formats supported now:
pub enum SupportedFormat {
JSON, TOML, YAML, Pickle, }
Because rust cannot define traits and structs externally at the same time, supporting new formats needs to be done within this project.
See From Traits Extension to learn how to support new format
Tools
- wex: A command line tool that can convert wxf format