zkinterface 1.3.4

An implementation of zkInterface
Documentation
use serde::{Serialize, Deserialize};
use crate::zkinterface_generated::zkinterface as fb;
use crate::{CircuitHeader, ConstraintSystem, Witness, Command};

#[derive(Clone, Debug, Eq, PartialEq, Deserialize, Serialize)]
pub enum Message {
    Header(CircuitHeader),
    ConstraintSystem(ConstraintSystem),
    Witness(Witness),
    Command(Command),
    Err(String),
}

impl<'a> From<&'a [u8]> for Message {
    fn from(buffer: &'a [u8]) -> Self {
        let msg = fb::get_size_prefixed_root_as_root(&buffer);

        match msg.message_type() {
            fb::Message::CircuitHeader => {
                let fb_header = msg.message_as_circuit_header().unwrap();
                Message::Header(CircuitHeader::from(fb_header))
            }
            fb::Message::ConstraintSystem => {
                let fb_constraints = msg.message_as_constraint_system().unwrap();
                Message::ConstraintSystem(ConstraintSystem::from(fb_constraints))
            }
            fb::Message::Witness => {
                let fb_witness = msg.message_as_witness().unwrap();
                Message::Witness(Witness::from(fb_witness))
            }
            fb::Message::Command => {
                let fb_command = msg.message_as_command().unwrap();
                Message::Command(Command::from(fb_command))
            }
            fb::Message::NONE => {
                Message::Err("Invalid message type".into())
            }
        }
    }
}