feat: Use DecodeOwned for improved ergonomic (#74)
This commit is contained in:
parent
7b4c67ccef
commit
3336d4d446
7 changed files with 20 additions and 53 deletions
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
|
|
|
|||
|
|
@ -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>);
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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>);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue