Skip to content

Ashvin-Ranjan/EMP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

EMP

Efficiently Managed Packaging, NBT but better!

Using the rust crate

Rust structure

pub enum Value {
  Null,
  Object(std::collections::HashMap<std::string::String, Value>),
  Array(std::vec::Vec<Value>),
  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<u8> 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<emp::value::Value, emp::errors::DecodeError> in return.

DecodeError is an enum that is as so:

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<emp::value::Value, emp::errors::ParseError>. 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] <filename>: Reads the│
│EMP bytecode and prints it out as a│
│EMP string.                        │
│                                   │
│[-w | --write] <filename> <emp>:   │
|Writes the EMP data into the file  │
│as EMP bytecode.                   │
│                                   │
│NOTE: Make sure your EMP data is in│
│quotes.                            │
│                                   │
│[-fj | --from_json] <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] <emp>: 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       │
└───────────────────────────────────┘

How the encoding scheme works

To check out notes on how this works please see the comments in the encoder function

To suggest improvements to the encoding system, please open an issue on the repo

About

Efficiently Managed Packaging, NBT but better!

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages