feat: Use DecodeOwned for improved ergonomic (#74)
This commit is contained in:
parent
2c500f679e
commit
3eb064502c
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>>;
|
fn write_cbor<W: Write>(&self, write: W) -> Result<(), minicbor::encode::Error<W::Error>>;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[macro_export]
|
pub trait DecodeOwned: for<'b> minicbor::Decode<'b> {}
|
||||||
macro_rules! impl_fragment {
|
|
||||||
($Struct:ty) => {
|
|
||||||
impl $crate::Fragment for $Struct {
|
|
||||||
fn read_cbor(buffer: &[u8]) -> Result<Self, decode::Error> {
|
|
||||||
$crate::minicbor::decode(buffer)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn write_cbor<W: encode::Write>(
|
impl<T> DecodeOwned for T where T: for<'b> minicbor::Decode<'b> {}
|
||||||
&self,
|
|
||||||
write: W,
|
impl<T> Fragment for T
|
||||||
) -> Result<(), encode::Error<W::Error>> {
|
where
|
||||||
$crate::minicbor::encode(self, write)
|
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 crate::common::Point;
|
||||||
|
|
||||||
use pallas_codec::impl_fragment;
|
|
||||||
use pallas_codec::minicbor::{decode, encode, Decode, Decoder, Encode, Encoder};
|
use pallas_codec::minicbor::{decode, encode, Decode, Decoder, Encode, Encoder};
|
||||||
|
|
||||||
#[derive(Debug, PartialEq, Clone)]
|
#[derive(Debug, PartialEq, Clone)]
|
||||||
|
|
@ -90,8 +89,6 @@ impl<'b> Decode<'b> for Message {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl_fragment!(Message);
|
|
||||||
|
|
||||||
pub trait Observer {
|
pub trait Observer {
|
||||||
fn on_block_received(&self, body: Vec<u8>) -> Result<(), Box<dyn std::error::Error>> {
|
fn on_block_received(&self, body: Vec<u8>) -> Result<(), Box<dyn std::error::Error>> {
|
||||||
log::debug!("block received, sice: {}", body.len());
|
log::debug!("block received, sice: {}", body.len());
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,5 @@
|
||||||
use crate::common::Point;
|
use crate::common::Point;
|
||||||
use pallas_codec::{
|
use pallas_codec::minicbor::{decode, encode, Decode, Decoder, Encode, Encoder};
|
||||||
impl_fragment,
|
|
||||||
minicbor::{decode, encode, Decode, Decoder, Encode, Encoder},
|
|
||||||
};
|
|
||||||
|
|
||||||
use super::{BlockContent, HeaderContent, Message, SkippedContent, Tip};
|
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 {
|
impl<'b> Decode<'b> for BlockContent {
|
||||||
fn decode(d: &mut Decoder<'b>) -> Result<Self, decode::Error> {
|
fn decode(d: &mut Decoder<'b>) -> Result<Self, decode::Error> {
|
||||||
d.tag()?;
|
d.tag()?;
|
||||||
|
|
@ -181,8 +176,6 @@ impl Encode for BlockContent {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl_fragment!(Message<BlockContent>);
|
|
||||||
|
|
||||||
impl<'b> Decode<'b> for SkippedContent {
|
impl<'b> Decode<'b> for SkippedContent {
|
||||||
fn decode(d: &mut Decoder<'b>) -> Result<Self, decode::Error> {
|
fn decode(d: &mut Decoder<'b>) -> Result<Self, decode::Error> {
|
||||||
d.skip()?;
|
d.skip()?;
|
||||||
|
|
@ -195,5 +188,3 @@ impl Encode for SkippedContent {
|
||||||
todo!()
|
todo!()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl_fragment!(Message<SkippedContent>);
|
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,7 @@
|
||||||
use core::panic;
|
use core::panic;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
use pallas_codec::{
|
use pallas_codec::minicbor::{decode, encode, Decode, Decoder, Encode, Encoder};
|
||||||
impl_fragment,
|
|
||||||
minicbor::{decode, encode, Decode, Decoder, Encode, Encoder},
|
|
||||||
};
|
|
||||||
|
|
||||||
use crate::machines::{Agent, MachineOutput};
|
use crate::machines::{Agent, MachineOutput};
|
||||||
|
|
||||||
|
|
@ -122,8 +119,6 @@ impl<'b> Decode<'b> for Message {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl_fragment!(Message);
|
|
||||||
|
|
||||||
#[derive(Debug, PartialEq, Eq)]
|
#[derive(Debug, PartialEq, Eq)]
|
||||||
pub enum State {
|
pub enum State {
|
||||||
Propose,
|
Propose,
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,7 @@
|
||||||
use core::panic;
|
use core::panic;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
use pallas_codec::{
|
use pallas_codec::minicbor::{decode, encode, Decode, Encode, Encoder};
|
||||||
impl_fragment,
|
|
||||||
minicbor::{decode, encode, Decode, Encode, Encoder},
|
|
||||||
};
|
|
||||||
|
|
||||||
use crate::machines::{Agent, MachineOutput};
|
use crate::machines::{Agent, MachineOutput};
|
||||||
|
|
||||||
|
|
@ -136,8 +133,6 @@ impl<'b> Decode<'b> for Message {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl_fragment!(Message);
|
|
||||||
|
|
||||||
#[derive(Debug, PartialEq, Eq)]
|
#[derive(Debug, PartialEq, Eq)]
|
||||||
pub enum State {
|
pub enum State {
|
||||||
Propose,
|
Propose,
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,6 @@
|
||||||
use pallas_codec::{
|
use pallas_codec::minicbor::{data::Cbor, decode, encode, Decode, Decoder, Encode, Encoder};
|
||||||
impl_fragment,
|
|
||||||
minicbor::{data::Cbor, decode, encode, Decode, Decoder, Encode, Encoder},
|
|
||||||
};
|
|
||||||
|
|
||||||
use super::{Message, Query};
|
use super::Query;
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct BlockQuery {}
|
pub struct BlockQuery {}
|
||||||
|
|
@ -69,5 +66,3 @@ impl Query for QueryV10 {
|
||||||
type Request = RequestV10;
|
type Request = RequestV10;
|
||||||
type Response = GenericResponse;
|
type Response = GenericResponse;
|
||||||
}
|
}
|
||||||
|
|
||||||
impl_fragment!(Message<QueryV10>);
|
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,7 @@ use std::fmt::Debug;
|
||||||
|
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
use log::debug;
|
use log::debug;
|
||||||
use pallas_codec::{
|
use pallas_codec::minicbor::{decode, encode, Decode, Decoder, Encode, Encoder};
|
||||||
impl_fragment,
|
|
||||||
minicbor::{decode, encode, Decode, Decoder, Encode, Encoder},
|
|
||||||
};
|
|
||||||
|
|
||||||
use crate::machines::{Agent, MachineError, MachineOutput, Transition};
|
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
|
/// 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
|
/// 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