#wolfram

wolfram_wxf

Convert a value to the Wolfram Language WXF format

17 releases

0.6.6 May 8, 2023
0.6.3 Mar 27, 2022
0.6.0 May 9, 2021
0.5.0 Nov 8, 2020
0.3.1 Mar 23, 2020
Download history 8/week @ 2023-05-16 12/week @ 2023-05-23 36/week @ 2023-05-30 12/week @ 2023-06-06 43/week @ 2023-06-13 79/week @ 2023-06-20 41/week @ 2023-06-27 44/week @ 2023-07-04 29/week @ 2023-07-11 38/week @ 2023-07-18 42/week @ 2023-07-25 24/week @ 2023-08-01 38/week @ 2023-08-08 55/week @ 2023-08-15 30/week @ 2023-08-22 20/week @ 2023-08-29

152 downloads per month
Used in 9 crates (6 directly)

MPL-2.0 license

215KB
8K SLoC

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 {
    /// Function with name, args
    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),
    /// Do not use `f64`, because partial order cannot be defined
    Decimal64([u8; 8]),
    BigDecimal(Box<str>),
    /// Need to optimize
    PackedArray(Vec<WolframValue>),
    /// Need to optimize
    NumericArray(Vec<WolframValue>),
    /// Record with key, rule, value
    Association(BTreeMap<WolframValue, (WolframValue, WolframValue)>),
    Rule,
    RuleDelayed,
}

Extension

Here are some common formats supported now:

pub enum SupportedFormat {
    JSON, //json
    TOML, //toml
    YAML, //yaml, yml
    Pickle, //pkl
}

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

Dependencies

~1.9–3MB
~58K SLoC