# EMP Efficiently Managed Packaging, NBT but better! ## Using the rust crate ### Rust structure ```rs pub enum Value { Null, Object(std::collections::HashMap), Array(std::vec::Vec), String(std::string::String), Bit(bool), Boolean(bool), Int32(i32), Float(f32), Double(f64), Int64(i64), Int16(i16), Int8(i8), } ``` ### Encoding Using `emp::encode::encode` you can pass in a `emp::value::Value` and get an `std::vec::Vec` back, this will encode the data in the `Value` into the bytes that you can then write to a file. ### Decoding Using `emp::decode::decode` you can pass in a `&[u8]` and get an `Result` in return. `DecodeError` is an enum that is as so: ```rs pub enum DecodeError { UnexpectedByte(u8, u64), EOFError, UnmatchedKey(std::string::String), StringDecodeError(std::str::Utf8Error), } ``` You can also use `emp::decode::decode_safe` and pass in the same data to decode the data in the same way but if there is an `Err` it instead returns `emp::value::Value::Null`. ### Parsing Using the `emp::value::parse::from_str` function you can pass in a `&str` to convert it into a `Result`. Alternatively you can use `emp::value::parse::from_str_safe` and pass in the same thing to get a `emp::value::Value`, if an error is encounted it returns a `emp::value::Value::Null` instead. ### JSON Compatability #### Conversion This crate is compatible with `serde_json`, by using `emp::value::json::from_json` you can convert a `serde_json::Value` to an `emp::value::Value`, vice versa for `emp::value::json::to_json`. #### Encoding Using `emp::encode::json::encode_json` you can encode a `serde_json::Value` directly into `emp` bytecode. #### Decoding Using `emp::decode::json::decode_json` you can decode `emp` bytecode directly into a `serde_json::Value`, this uses `decode_safe` rather than `decode`. You can also use `emp::decode::json::decode_json_unsafe` to get the error instead of a `serde_json::Value::Null` ## The Command Line Utility You are able to run it using `emp`: ``` ┌───────────────────────────────────┐ │[E]fficiently [M]anaged [P]ackaging│ │ Help: │ │ │ │[-r | --read] : Reads the│ │EMP bytecode and prints it out as a│ │EMP string. │ │ │ │[-w | --write] : │ |Writes the EMP data into the file │ │as EMP bytecode. │ │ │ │NOTE: Make sure your EMP data is in│ │quotes. │ │ │ │[-fj | --from_json] : Parses │ │the JSON data and prints it out as │ │an EMP string. │ │ │ │NOTE: Make sure your json data is │ │in quotes. │ │ │ │[-tj | --to_json] : Parses the│ │EMP data and prints it out as a │ │json string. │ │ │ │NOTE: Make sure your EMP data is in│ │quotes. │ │ │ │[-v | --version]: Prints out the │ │version of EMP you are using │ └───────────────────────────────────┘ ```