feat: Use DecodeOwned for improved ergonomic (#74)

This commit is contained in:
Santiago Carmuega 2022-03-14 18:27:00 -03:00 committed by GitHub
parent 7b4c67ccef
commit 3336d4d446
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 20 additions and 53 deletions

View file

@ -11,20 +11,19 @@ pub trait Fragment: Sized {
fn write_cbor<W: Write>(&self, write: W) -> Result<(), minicbor::encode::Error<W::Error>>;
}
#[macro_export]
macro_rules! impl_fragment {
($Struct:ty) => {
impl $crate::Fragment for $Struct {
fn read_cbor(buffer: &[u8]) -> Result<Self, decode::Error> {
$crate::minicbor::decode(buffer)
}
pub trait DecodeOwned: for<'b> minicbor::Decode<'b> {}
fn write_cbor<W: encode::Write>(
&self,
write: W,
) -> Result<(), encode::Error<W::Error>> {
$crate::minicbor::encode(self, write)
}
}
};
impl<T> DecodeOwned for T where T: for<'b> minicbor::Decode<'b> {}
impl<T> Fragment for T
where
T: DecodeOwned + minicbor::Encode,
{
fn read_cbor(buffer: &[u8]) -> Result<Self, minicbor::decode::Error> {
minicbor::decode(buffer)
}
fn write_cbor<W: Write>(&self, write: W) -> Result<(), minicbor::encode::Error<W::Error>> {
minicbor::encode(self, write)
}
}

View file

@ -4,7 +4,6 @@ use crate::machines::{Agent, MachineOutput, Transition};
use crate::common::Point;
use pallas_codec::impl_fragment;
use pallas_codec::minicbor::{decode, encode, Decode, Decoder, Encode, Encoder};
#[derive(Debug, PartialEq, Clone)]
@ -90,8 +89,6 @@ impl<'b> Decode<'b> for Message {
}
}
impl_fragment!(Message);
pub trait Observer {
fn on_block_received(&self, body: Vec<u8>) -> Result<(), Box<dyn std::error::Error>> {
log::debug!("block received, sice: {}", body.len());

View file

@ -1,8 +1,5 @@
use crate::common::Point;
use pallas_codec::{
impl_fragment,
minicbor::{decode, encode, Decode, Decoder, Encode, Encoder},
};
use pallas_codec::minicbor::{decode, encode, Decode, Decoder, Encode, Encoder};
use super::{BlockContent, HeaderContent, Message, SkippedContent, Tip};
@ -165,8 +162,6 @@ impl Encode for HeaderContent {
}
}
impl_fragment!(Message<HeaderContent>);
impl<'b> Decode<'b> for BlockContent {
fn decode(d: &mut Decoder<'b>) -> Result<Self, decode::Error> {
d.tag()?;
@ -181,8 +176,6 @@ impl Encode for BlockContent {
}
}
impl_fragment!(Message<BlockContent>);
impl<'b> Decode<'b> for SkippedContent {
fn decode(d: &mut Decoder<'b>) -> Result<Self, decode::Error> {
d.skip()?;
@ -195,5 +188,3 @@ impl Encode for SkippedContent {
todo!()
}
}
impl_fragment!(Message<SkippedContent>);

View file

@ -1,10 +1,7 @@
use core::panic;
use std::collections::HashMap;
use pallas_codec::{
impl_fragment,
minicbor::{decode, encode, Decode, Decoder, Encode, Encoder},
};
use pallas_codec::minicbor::{decode, encode, Decode, Decoder, Encode, Encoder};
use crate::machines::{Agent, MachineOutput};
@ -122,8 +119,6 @@ impl<'b> Decode<'b> for Message {
}
}
impl_fragment!(Message);
#[derive(Debug, PartialEq, Eq)]
pub enum State {
Propose,

View file

@ -1,10 +1,7 @@
use core::panic;
use std::collections::HashMap;
use pallas_codec::{
impl_fragment,
minicbor::{decode, encode, Decode, Encode, Encoder},
};
use pallas_codec::minicbor::{decode, encode, Decode, Encode, Encoder};
use crate::machines::{Agent, MachineOutput};
@ -136,8 +133,6 @@ impl<'b> Decode<'b> for Message {
}
}
impl_fragment!(Message);
#[derive(Debug, PartialEq, Eq)]
pub enum State {
Propose,

View file

@ -1,9 +1,6 @@
use pallas_codec::{
impl_fragment,
minicbor::{data::Cbor, decode, encode, Decode, Decoder, Encode, Encoder},
};
use pallas_codec::minicbor::{data::Cbor, decode, encode, Decode, Decoder, Encode, Encoder};
use super::{Message, Query};
use super::Query;
#[derive(Debug, Clone)]
pub struct BlockQuery {}
@ -69,5 +66,3 @@ impl Query for QueryV10 {
type Request = RequestV10;
type Response = GenericResponse;
}
impl_fragment!(Message<QueryV10>);

View file

@ -2,10 +2,7 @@ use std::fmt::Debug;
use itertools::Itertools;
use log::debug;
use pallas_codec::{
impl_fragment,
minicbor::{decode, encode, Decode, Decoder, Encode, Encoder},
};
use pallas_codec::minicbor::{decode, encode, Decode, Decoder, Encode, Encoder};
use crate::machines::{Agent, MachineError, MachineOutput, Transition};
@ -142,8 +139,6 @@ impl<'b> Decode<'b> for Message {
}
}
impl_fragment!(Message);
/// A very basic tx provider agent with a fixed set of tx to submit
///
/// This provider takes a set of tx from a vec as the single, static source of