add integer based on plutus core manual information

This commit is contained in:
Kasey White 2022-05-24 04:55:10 -04:00
parent b345afd12f
commit 2e130ac5f0
3 changed files with 27 additions and 5 deletions

View File

@ -20,6 +20,14 @@ impl Encode for u8 {
}
}
impl Encode for isize {
fn encode(&self, e: &mut Encoder) -> Result<(), String> {
e.integer(*self)?;
Ok(())
}
}
impl Encode for char {
fn encode(&self, e: &mut Encoder) -> Result<(), String> {
e.char(*self)?;

View File

@ -51,7 +51,13 @@ impl Encoder {
self
}
pub fn bytes(&mut self, arr: &[u8]) -> Result<&mut Self, String> {
pub fn bytes(&mut self, x: &[u8]) -> Result<&mut Self, String> {
// use filler to write current buffer so bits used gets reset
self.filler();
self.byte_array(x)
}
pub fn byte_array(&mut self, arr: &[u8]) -> Result<&mut Self, String> {
if self.used_bits != 0 {
return Err("Buffer is not byte aligned".to_string());
}
@ -59,8 +65,13 @@ impl Encoder {
Ok(self)
}
pub fn integer(&mut self, i: isize) -> Result<&mut Self, String> {
self.word(i);
Ok(self)
}
pub fn char(&mut self, c: char) -> Result<&mut Self, String> {
self.word(c as u32);
self.word(c as isize);
Ok(self)
}
@ -121,7 +132,7 @@ impl Encoder {
self.write_blk(arr, src_ptr);
}
fn word(&mut self, c: u32) {
fn word(&mut self, c: isize) {
loop {
let mut w = (c & 127) as u8;
let c = c >> 7;

View File

@ -74,7 +74,7 @@ pub fn safe_encode_bits(num_bits: u32, byte: u8, e: &mut Encoder) -> Result<(),
pub enum Constant {
// TODO: figure out the right size for this
// tag: 0
Integer(i64),
Integer(isize),
// tag: 1
ByteString(Vec<u8>),
// tag: 2
@ -159,7 +159,10 @@ impl Encode for Term {
impl Encode for &Constant {
fn encode(&self, e: &mut Encoder) -> Result<(), String> {
match self {
Constant::Integer(_) => todo!(),
Constant::Integer(i) => {
encode_constant(0, e)?;
i.encode(e)?;
}
Constant::ByteString(bytes) => {
encode_constant(1, e)?;
bytes.encode(e)?;