Skip to content

Commit

Permalink
add Serialize trait for MintToken
Browse files Browse the repository at this point in the history
  • Loading branch information
Mr-Leshiy committed Nov 29, 2021
1 parent b8cdf67 commit 59d72dc
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 9 deletions.
22 changes: 19 additions & 3 deletions chain-impl-mockchain/src/certificate/mint_token.rs
Expand Up @@ -5,12 +5,12 @@ use crate::{
transaction::{Payload, PayloadAuthData, PayloadData, PayloadSlice},
value::Value,
};
use chain_core::property::{Deserialize, ReadError};
use chain_core::property::{Deserialize, ReadError, Serialize, WriteError};
use typed_bytes::ByteBuilder;

use std::marker::PhantomData;

#[derive(Debug, Clone)]
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct MintToken {
pub name: TokenName,
pub policy: MintingPolicy,
Expand Down Expand Up @@ -54,6 +54,15 @@ impl Payload for MintToken {
}
}

impl Serialize for MintToken {
fn serialize<W: std::io::Write>(&self, mut writer: W) -> Result<(), WriteError> {
self.name.serialize(&mut writer)?;
self.policy.serialize(&mut writer)?;
self.to.serialize(&mut writer)?;
self.value.serialize(writer)
}
}

impl Deserialize for MintToken {
fn deserialize<R: std::io::BufRead>(mut reader: R) -> Result<Self, ReadError> {
let name = TokenName::deserialize(&mut reader)?;
Expand All @@ -73,7 +82,8 @@ impl Deserialize for MintToken {
#[cfg(any(test, feature = "property-test-api"))]
mod tests {
use super::*;
use quickcheck::{Arbitrary, Gen};
use crate::testing::serialization::serialization_bijection;
use quickcheck::{Arbitrary, Gen, TestResult};

impl Arbitrary for MintToken {
fn arbitrary<G: Gen>(g: &mut G) -> Self {
Expand All @@ -89,4 +99,10 @@ mod tests {
}
}
}

quickcheck! {
fn minttoken_serialization_bijection(b: MintToken) -> TestResult {
serialization_bijection(b)
}
}
}
3 changes: 1 addition & 2 deletions chain-impl-mockchain/src/certificate/update_proposal.rs
Expand Up @@ -79,8 +79,7 @@ impl Payload for UpdateProposal {
impl Serialize for UpdateProposal {
fn serialize<W: std::io::Write>(&self, mut writer: W) -> Result<(), WriteError> {
self.changes.serialize(&mut writer)?;
self.proposer_id.serialize(writer)?;
Ok(())
self.proposer_id.serialize(writer)
}
}

Expand Down
9 changes: 8 additions & 1 deletion chain-impl-mockchain/src/tokens/minting_policy.rs
@@ -1,7 +1,7 @@
use crate::tokens::policy_hash::{PolicyHash, POLICY_HASH_SIZE};
use chain_core::{
packer::Codec,
property::{Deserialize, ReadError},
property::{Deserialize, ReadError, Serialize, WriteError},
};
use cryptoxide::{blake2b::Blake2b, digest::Digest};
use thiserror::Error;
Expand Down Expand Up @@ -70,6 +70,13 @@ impl Default for MintingPolicy {
}
}

impl Serialize for MintingPolicy {
fn serialize<W: std::io::Write>(&self, writer: W) -> Result<(), WriteError> {
let mut codec = Codec::new(writer);
codec.put_u8(0_u8)
}
}

impl Deserialize for MintingPolicy {
fn deserialize<R: std::io::BufRead>(reader: R) -> Result<Self, ReadError> {
let mut codec = Codec::new(reader);
Expand Down
13 changes: 10 additions & 3 deletions chain-impl-mockchain/src/tokens/name.rs
@@ -1,9 +1,8 @@
use std::convert::TryFrom;

use chain_core::{
packer::Codec,
property::{Deserialize, ReadError},
property::{Deserialize, ReadError, Serialize, WriteError},
};
use std::convert::TryFrom;
use thiserror::Error;

pub const TOKEN_NAME_MAX_SIZE: usize = 32;
Expand Down Expand Up @@ -39,6 +38,14 @@ impl TryFrom<Vec<u8>> for TokenName {
}
}

impl Serialize for TokenName {
fn serialize<W: std::io::Write>(&self, writer: W) -> Result<(), WriteError> {
let mut codec = Codec::new(writer);
codec.put_u8(self.0.len() as u8)?;
codec.put_bytes(self.0.as_slice())
}
}

impl Deserialize for TokenName {
fn deserialize<R: std::io::BufRead>(reader: R) -> Result<Self, ReadError> {
let mut codec = Codec::new(reader);
Expand Down

0 comments on commit 59d72dc

Please sign in to comment.