# 🪐 libnewton
A library for interacting with Prism 🌈
> Visit https://github.com/taleroangel/prism for more information about the **Prism Project**
This repository contains most of the implementation of the _[Prism](https://github.com/taleroangel/prism)_ protocol with all the numeric constants defined inside _protobuf_ files in order to make porting to many programming languages easier
## ✒️ List of supported programming languages
Current implemented languages and stages:
| Protobuf | 🟢 |
| Rust | 🟢 |
### ✴️ Base (protobuf)
The base implementtion of libnewton (constants names and values like the _InstructionSet_, _Registers_ and _AddressingMode_) are defined in a set of protobuf files found in the [protobuf](./protobuf/) directory, this is the base from which new libraries should be built upon and can be a direct dependency
### 🦀 Rust
The rust library depends on the **[protoc-gen-prost](https://crates.io/crates/protoc-gen-prost)** crate for generating the protobuf base files rust implementation. These files are commited to source control but can be recompiled using the following command invoked from parent directory:
protoc -I ./protobuf --prost_out=rust/src/proto ./protobuf/*.proto
## 🔭 Newton
Newton is the name given to the _Prism Instruction Interpreter_ therefore a _Newton Interpreter_ is required in every slave device. Instructions are interpreted in _Prism Binary Format_ which can be assembled from a _Prism Assembly Language_ using this library