Skip to content

Commit ec4b21b

Browse files
committed
feat: no args
1 parent bd7d7b5 commit ec4b21b

File tree

20 files changed

+251
-210
lines changed

20 files changed

+251
-210
lines changed

Cargo.toml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@ categories = ["encoding"]
1212
license-file = "LICENSE.txt"
1313

1414
[workspace.dependencies]
15-
tlbits = { path = "./crates/bits", version = "0.6.2" }
16-
tlb = { path = "./crates/tlb", version = "0.6.2" }
17-
tlb-ton = { path = "./crates/tlb-ton", version = "0.6.2" }
18-
ton-contracts = { path = "./crates/contracts", version = "0.6.2" }
19-
toner = { path = "./crates/toner", version = "0.6.2" }
15+
tlbits = { path = "./crates/bits", version = "0.6.3" }
16+
tlb = { path = "./crates/tlb", version = "0.6.3" }
17+
tlb-ton = { path = "./crates/tlb-ton", version = "0.6.3" }
18+
ton-contracts = { path = "./crates/contracts", version = "0.6.3" }
19+
toner = { path = "./crates/toner", version = "0.6.3" }
2020

2121
anyhow = "1"
2222
arbitrary = "1.4"

crates/bits/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "tlbits"
3-
version = "0.6.2"
3+
version = "0.6.3"
44
edition.workspace = true
55
rust-version.workspace = true
66
repository.workspace = true

crates/bits/src/as/args.rs

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
use core::marker::PhantomData;
1+
use core::{
2+
fmt::Debug,
3+
hash::Hash,
4+
marker::PhantomData,
5+
panic::{RefUnwindSafe, UnwindSafe},
6+
};
27

38
use crate::{
49
de::{BitReader, BitUnpackAs},
@@ -7,6 +12,45 @@ use crate::{
712

813
use super::Same;
914

15+
pub trait NoArgs:
16+
Sized
17+
+ Send
18+
+ Sync
19+
+ Unpin
20+
+ Debug
21+
+ UnwindSafe
22+
+ RefUnwindSafe
23+
+ Clone
24+
+ Copy
25+
+ Default
26+
+ PartialEq
27+
+ Eq
28+
+ Ord
29+
+ PartialOrd
30+
+ Hash
31+
{
32+
const EMPTY: Self;
33+
}
34+
35+
macro_rules! impl_no_args_for_tuple {
36+
(@impl $($t:ident),*) => {
37+
impl<$($t),*> NoArgs for ($($t,)*)
38+
where $(
39+
$t: NoArgs,
40+
)*{
41+
const EMPTY: Self = ($($t::EMPTY,)*);
42+
}
43+
};
44+
($t:ident $(,$ts:ident)*) => {
45+
impl_no_args_for_tuple!($($ts),*);
46+
impl_no_args_for_tuple!(@impl $t $(,$ts)*);
47+
};
48+
() => {
49+
impl_no_args_for_tuple!(@impl);
50+
};
51+
}
52+
impl_no_args_for_tuple!(T9, T8, T7, T6, T5, T4, T3, T2, T1, T0);
53+
1054
/// Adapter to implement **de**/**ser**ialize with [`Default`] args.
1155
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
1256
pub struct DefaultArgs<As: ?Sized = Same>(PhantomData<As>);

crates/bits/src/de/as.rs

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -98,37 +98,39 @@ where
9898
}
9999

100100
macro_rules! impl_bit_unpack_as_for_tuple {
101-
($($n:tt:$t:ident as $a:ident),+) => {
102-
impl<'de, $($t, $a),+> BitUnpackAs<'de, ($($t,)+)> for ($($a,)+)
101+
($($ts:ident as $as:ident:$ns:tt),*) => {
102+
impl<'de, $($ts, $as),*> BitUnpackAs<'de, ($($ts,)*)> for ($($as,)*)
103103
where $(
104-
$a: BitUnpackAs<'de, $t>,
105-
)+
104+
$as: BitUnpackAs<'de, $ts>,
105+
)*
106106
{
107-
type Args = ($($a::Args,)+);
107+
type Args = ($($as::Args,)*);
108108

109109
#[inline]
110-
fn unpack_as<R>(reader: &mut R, args: Self::Args) -> Result<($($t,)+), R::Error>
110+
#[allow(unused_variables)]
111+
fn unpack_as<R>(reader: &mut R, args: Self::Args) -> Result<($($ts,)*), R::Error>
111112
where
112113
R: BitReader<'de> + ?Sized,
113114
{
114115
Ok(($(
115-
$a::unpack_as(reader, args.$n)
116-
.context(concat!(".", stringify!($n)))?,
117-
)+))
116+
$as::unpack_as(reader, args.$ns)
117+
.context(concat!(".", stringify!($ns)))?,
118+
)*))
118119
}
119120
}
120121
};
121122
}
122-
impl_bit_unpack_as_for_tuple!(0:T0 as As0);
123-
impl_bit_unpack_as_for_tuple!(0:T0 as As0,1:T1 as As1);
124-
impl_bit_unpack_as_for_tuple!(0:T0 as As0,1:T1 as As1,2:T2 as As2);
125-
impl_bit_unpack_as_for_tuple!(0:T0 as As0,1:T1 as As1,2:T2 as As2,3:T3 as As3);
126-
impl_bit_unpack_as_for_tuple!(0:T0 as As0,1:T1 as As1,2:T2 as As2,3:T3 as As3,4:T4 as As4);
127-
impl_bit_unpack_as_for_tuple!(0:T0 as As0,1:T1 as As1,2:T2 as As2,3:T3 as As3,4:T4 as As4,5:T5 as As5);
128-
impl_bit_unpack_as_for_tuple!(0:T0 as As0,1:T1 as As1,2:T2 as As2,3:T3 as As3,4:T4 as As4,5:T5 as As5,6:T6 as As6);
129-
impl_bit_unpack_as_for_tuple!(0:T0 as As0,1:T1 as As1,2:T2 as As2,3:T3 as As3,4:T4 as As4,5:T5 as As5,6:T6 as As6,7:T7 as As7);
130-
impl_bit_unpack_as_for_tuple!(0:T0 as As0,1:T1 as As1,2:T2 as As2,3:T3 as As3,4:T4 as As4,5:T5 as As5,6:T6 as As6,7:T7 as As7,8:T8 as As8);
131-
impl_bit_unpack_as_for_tuple!(0:T0 as As0,1:T1 as As1,2:T2 as As2,3:T3 as As3,4:T4 as As4,5:T5 as As5,6:T6 as As6,7:T7 as As7,8:T8 as As8,9:T9 as As9);
123+
impl_bit_unpack_as_for_tuple!();
124+
impl_bit_unpack_as_for_tuple!(T0 as As0:0);
125+
impl_bit_unpack_as_for_tuple!(T0 as As0:0,T1 as As1:1);
126+
impl_bit_unpack_as_for_tuple!(T0 as As0:0,T1 as As1:1,T2 as As2:2);
127+
impl_bit_unpack_as_for_tuple!(T0 as As0:0,T1 as As1:1,T2 as As2:2,T3 as As3:3);
128+
impl_bit_unpack_as_for_tuple!(T0 as As0:0,T1 as As1:1,T2 as As2:2,T3 as As3:3,T4 as As4:4);
129+
impl_bit_unpack_as_for_tuple!(T0 as As0:0,T1 as As1:1,T2 as As2:2,T3 as As3:3,T4 as As4:4,T5 as As5:5);
130+
impl_bit_unpack_as_for_tuple!(T0 as As0:0,T1 as As1:1,T2 as As2:2,T3 as As3:3,T4 as As4:4,T5 as As5:5,T6 as As6:6);
131+
impl_bit_unpack_as_for_tuple!(T0 as As0:0,T1 as As1:1,T2 as As2:2,T3 as As3:3,T4 as As4:4,T5 as As5:5,T6 as As6:6,T7 as As7:7);
132+
impl_bit_unpack_as_for_tuple!(T0 as As0:0,T1 as As1:1,T2 as As2:2,T3 as As3:3,T4 as As4:4,T5 as As5:5,T6 as As6:6,T7 as As7:7,T8 as As8:8);
133+
impl_bit_unpack_as_for_tuple!(T0 as As0:0,T1 as As1:1,T2 as As2:2,T3 as As3:3,T4 as As4:4,T5 as As5:5,T6 as As6:6,T7 as As7:7,T8 as As8:8,T9 as As9:9);
132134

133135
impl<'de, T, As> BitUnpackAs<'de, Box<T>> for Box<As>
134136
where

crates/bits/src/de/mod.rs

Lines changed: 31 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -74,17 +74,39 @@ where
7474
unpack_fully(BitSlice::from_slice(bytes), args)
7575
}
7676

77-
impl<'de> BitUnpack<'de> for () {
78-
type Args = ();
77+
macro_rules! impl_bit_unpack_for_tuple {
78+
($($t:ident:$n:tt),*) => {
79+
impl<'de, $($t),*> BitUnpack<'de> for ($($t,)*)
80+
where $(
81+
$t: BitUnpack<'de>,
82+
)*
83+
{
84+
type Args = ($($t::Args,)*);
7985

80-
#[inline]
81-
fn unpack<R>(_reader: &mut R, _: Self::Args) -> Result<Self, R::Error>
82-
where
83-
R: BitReader<'de> + ?Sized,
84-
{
85-
Ok(())
86-
}
86+
#[inline]
87+
#[allow(unused_variables)]
88+
fn unpack<R>(reader: &mut R, args: Self::Args) -> Result<Self, R::Error>
89+
where
90+
R: BitReader<'de> + ?Sized,
91+
{
92+
Ok(($(
93+
$t::unpack(reader, args.$n).context(concat!(".", stringify!($n)))?,
94+
)*))
95+
}
96+
}
97+
};
8798
}
99+
impl_bit_unpack_for_tuple!();
100+
impl_bit_unpack_for_tuple!(T0:0);
101+
impl_bit_unpack_for_tuple!(T0:0,T1:1);
102+
impl_bit_unpack_for_tuple!(T0:0,T1:1,T2:2);
103+
impl_bit_unpack_for_tuple!(T0:0,T1:1,T2:2,T3:3);
104+
impl_bit_unpack_for_tuple!(T0:0,T1:1,T2:2,T3:3,T4:4);
105+
impl_bit_unpack_for_tuple!(T0:0,T1:1,T2:2,T3:3,T4:4,T5:5);
106+
impl_bit_unpack_for_tuple!(T0:0,T1:1,T2:2,T3:3,T4:4,T5:5,T6:6);
107+
impl_bit_unpack_for_tuple!(T0:0,T1:1,T2:2,T3:3,T4:4,T5:5,T6:6,T7:7);
108+
impl_bit_unpack_for_tuple!(T0:0,T1:1,T2:2,T3:3,T4:4,T5:5,T6:6,T7:7,T8:8);
109+
impl_bit_unpack_for_tuple!(T0:0,T1:1,T2:2,T3:3,T4:4,T5:5,T6:6,T7:7,T8:8,T9:9);
88110

89111
impl<'de> BitUnpack<'de> for bool {
90112
type Args = ();
@@ -117,38 +139,6 @@ where
117139
}
118140
}
119141

120-
macro_rules! impl_bit_unpack_for_tuple {
121-
($($n:tt:$t:ident),+) => {
122-
impl<'de, $($t),+> BitUnpack<'de> for ($($t,)+)
123-
where $(
124-
$t: BitUnpack<'de>,
125-
)+
126-
{
127-
type Args = ($($t::Args,)+);
128-
129-
#[inline]
130-
fn unpack<R>(reader: &mut R, args: Self::Args) -> Result<Self, R::Error>
131-
where
132-
R: BitReader<'de> + ?Sized,
133-
{
134-
Ok(($(
135-
$t::unpack(reader, args.$n).context(concat!(".", stringify!($n)))?,
136-
)+))
137-
}
138-
}
139-
};
140-
}
141-
impl_bit_unpack_for_tuple!(0:T0);
142-
impl_bit_unpack_for_tuple!(0:T0,1:T1);
143-
impl_bit_unpack_for_tuple!(0:T0,1:T1,2:T2);
144-
impl_bit_unpack_for_tuple!(0:T0,1:T1,2:T2,3:T3);
145-
impl_bit_unpack_for_tuple!(0:T0,1:T1,2:T2,3:T3,4:T4);
146-
impl_bit_unpack_for_tuple!(0:T0,1:T1,2:T2,3:T3,4:T4,5:T5);
147-
impl_bit_unpack_for_tuple!(0:T0,1:T1,2:T2,3:T3,4:T4,5:T5,6:T6);
148-
impl_bit_unpack_for_tuple!(0:T0,1:T1,2:T2,3:T3,4:T4,5:T5,6:T6,7:T7);
149-
impl_bit_unpack_for_tuple!(0:T0,1:T1,2:T2,3:T3,4:T4,5:T5,6:T6,7:T7,8:T8);
150-
impl_bit_unpack_for_tuple!(0:T0,1:T1,2:T2,3:T3,4:T4,5:T5,6:T6,7:T7,8:T8,9:T9);
151-
152142
impl<'de, T> BitUnpack<'de> for Box<T>
153143
where
154144
T: BitUnpack<'de>,

crates/bits/src/ser/as.rs

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -102,36 +102,37 @@ where
102102
}
103103

104104
macro_rules! impl_bit_pack_as_for_tuple {
105-
($($n:tt:$t:ident as $a:ident),+) => {
106-
impl<$($t, $a),+> BitPackAs<($($t,)+)> for ($($a,)+)
105+
($($t:ident as $a:ident:$n:tt),*) => {
106+
impl<$($t, $a),*> BitPackAs<($($t,)*)> for ($($a,)*)
107107
where $(
108108
$a: BitPackAs<$t>,
109-
)+
109+
)*
110110
{
111-
type Args = ($($a::Args,)+);
111+
type Args = ($($a::Args,)*);
112112

113113
#[inline]
114-
fn pack_as<W>(source: &($($t,)+), writer: &mut W, args: Self::Args) -> Result<(), W::Error>
114+
#[allow(unused_variables)]
115+
fn pack_as<W>(source: &($($t,)*), writer: &mut W, args: Self::Args) -> Result<(), W::Error>
115116
where
116117
W: BitWriter + ?Sized,
117-
{
118-
writer$(
119-
.pack_as::<&$t, &$a>(&source.$n, args.$n)?)+;
118+
{$(
119+
$a::pack_as(&source.$n, writer, args.$n)?;)*
120120
Ok(())
121121
}
122122
}
123123
};
124124
}
125-
impl_bit_pack_as_for_tuple!(0:T0 as As0);
126-
impl_bit_pack_as_for_tuple!(0:T0 as As0,1:T1 as As1);
127-
impl_bit_pack_as_for_tuple!(0:T0 as As0,1:T1 as As1,2:T2 as As2);
128-
impl_bit_pack_as_for_tuple!(0:T0 as As0,1:T1 as As1,2:T2 as As2,3:T3 as As3);
129-
impl_bit_pack_as_for_tuple!(0:T0 as As0,1:T1 as As1,2:T2 as As2,3:T3 as As3,4:T4 as As4);
130-
impl_bit_pack_as_for_tuple!(0:T0 as As0,1:T1 as As1,2:T2 as As2,3:T3 as As3,4:T4 as As4,5:T5 as As5);
131-
impl_bit_pack_as_for_tuple!(0:T0 as As0,1:T1 as As1,2:T2 as As2,3:T3 as As3,4:T4 as As4,5:T5 as As5,6:T6 as As6);
132-
impl_bit_pack_as_for_tuple!(0:T0 as As0,1:T1 as As1,2:T2 as As2,3:T3 as As3,4:T4 as As4,5:T5 as As5,6:T6 as As6,7:T7 as As7);
133-
impl_bit_pack_as_for_tuple!(0:T0 as As0,1:T1 as As1,2:T2 as As2,3:T3 as As3,4:T4 as As4,5:T5 as As5,6:T6 as As6,7:T7 as As7,8:T8 as As8);
134-
impl_bit_pack_as_for_tuple!(0:T0 as As0,1:T1 as As1,2:T2 as As2,3:T3 as As3,4:T4 as As4,5:T5 as As5,6:T6 as As6,7:T7 as As7,8:T8 as As8,9:T9 as As9);
125+
impl_bit_pack_as_for_tuple!();
126+
impl_bit_pack_as_for_tuple!(T0 as As0:0);
127+
impl_bit_pack_as_for_tuple!(T0 as As0:0,T1 as As1:1);
128+
impl_bit_pack_as_for_tuple!(T0 as As0:0,T1 as As1:1,T2 as As2:2);
129+
impl_bit_pack_as_for_tuple!(T0 as As0:0,T1 as As1:1,T2 as As2:2,T3 as As3:3);
130+
impl_bit_pack_as_for_tuple!(T0 as As0:0,T1 as As1:1,T2 as As2:2,T3 as As3:3,T4 as As4:4);
131+
impl_bit_pack_as_for_tuple!(T0 as As0:0,T1 as As1:1,T2 as As2:2,T3 as As3:3,T4 as As4:4,T5 as As5:5);
132+
impl_bit_pack_as_for_tuple!(T0 as As0:0,T1 as As1:1,T2 as As2:2,T3 as As3:3,T4 as As4:4,T5 as As5:5,T6 as As6:6);
133+
impl_bit_pack_as_for_tuple!(T0 as As0:0,T1 as As1:1,T2 as As2:2,T3 as As3:3,T4 as As4:4,T5 as As5:5,T6 as As6:6,T7 as As7:7);
134+
impl_bit_pack_as_for_tuple!(T0 as As0:0,T1 as As1:1,T2 as As2:2,T3 as As3:3,T4 as As4:4,T5 as As5:5,T6 as As6:6,T7 as As7:7,T8 as As8:8);
135+
impl_bit_pack_as_for_tuple!(T0 as As0:0,T1 as As1:1,T2 as As2:2,T3 as As3:3,T4 as As4:4,T5 as As5:5,T6 as As6:6,T7 as As7:7,T8 as As8:8,T9 as As9:9);
135136

136137
impl<T, As> BitPackAs<Rc<T>> for Box<As>
137138
where

crates/bits/src/ser/mod.rs

Lines changed: 30 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -53,17 +53,38 @@ where
5353
Ok(writer.bit_count())
5454
}
5555

56-
impl BitPack for () {
57-
type Args = ();
56+
macro_rules! impl_bit_pack_for_tuple {
57+
($($t:ident:$n:tt),*) => {
58+
impl<$($t),*> BitPack for ($($t,)*)
59+
where $(
60+
$t: BitPack,
61+
)*
62+
{
63+
type Args = ($($t::Args,)*);
5864

59-
#[inline]
60-
fn pack<W>(&self, _writer: &mut W, _: Self::Args) -> Result<(), W::Error>
61-
where
62-
W: BitWriter + ?Sized,
63-
{
64-
Ok(())
65-
}
65+
#[inline]
66+
#[allow(unused_variables)]
67+
fn pack<W>(&self, writer: &mut W, args: Self::Args) -> Result<(), W::Error>
68+
where
69+
W: BitWriter + ?Sized,
70+
{
71+
$(self.$n.pack(writer, args.$n).context(concat!(".", stringify!($n)))?;)*
72+
Ok(())
73+
}
74+
}
75+
};
6676
}
77+
impl_bit_pack_for_tuple!();
78+
impl_bit_pack_for_tuple!(T0:0);
79+
impl_bit_pack_for_tuple!(T0:0,T1:1);
80+
impl_bit_pack_for_tuple!(T0:0,T1:1,T2:2);
81+
impl_bit_pack_for_tuple!(T0:0,T1:1,T2:2,T3:3);
82+
impl_bit_pack_for_tuple!(T0:0,T1:1,T2:2,T3:3,T4:4);
83+
impl_bit_pack_for_tuple!(T0:0,T1:1,T2:2,T3:3,T4:4,T5:5);
84+
impl_bit_pack_for_tuple!(T0:0,T1:1,T2:2,T3:3,T4:4,T5:5,T6:6);
85+
impl_bit_pack_for_tuple!(T0:0,T1:1,T2:2,T3:3,T4:4,T5:5,T6:6,T7:7);
86+
impl_bit_pack_for_tuple!(T0:0,T1:1,T2:2,T3:3,T4:4,T5:5,T6:6,T7:7,T8:8);
87+
impl_bit_pack_for_tuple!(T0:0,T1:1,T2:2,T3:3,T4:4,T5:5,T6:6,T7:7,T8:8,T9:9);
6788

6889
impl BitPack for bool {
6990
type Args = ();
@@ -94,37 +115,6 @@ where
94115
}
95116
}
96117

97-
macro_rules! impl_bit_pack_for_tuple {
98-
($($n:tt:$t:ident),+) => {
99-
impl<$($t),+> BitPack for ($($t,)+)
100-
where $(
101-
$t: BitPack,
102-
)+
103-
{
104-
type Args = ($($t::Args,)+);
105-
106-
#[inline]
107-
fn pack<W>(&self, writer: &mut W, args: Self::Args) -> Result<(), W::Error>
108-
where
109-
W: BitWriter + ?Sized,
110-
{
111-
$(self.$n.pack(writer, args.$n).context(concat!(".", stringify!($n)))?;)+
112-
Ok(())
113-
}
114-
}
115-
};
116-
}
117-
impl_bit_pack_for_tuple!(0:T0);
118-
impl_bit_pack_for_tuple!(0:T0,1:T1);
119-
impl_bit_pack_for_tuple!(0:T0,1:T1,2:T2);
120-
impl_bit_pack_for_tuple!(0:T0,1:T1,2:T2,3:T3);
121-
impl_bit_pack_for_tuple!(0:T0,1:T1,2:T2,3:T3,4:T4);
122-
impl_bit_pack_for_tuple!(0:T0,1:T1,2:T2,3:T3,4:T4,5:T5);
123-
impl_bit_pack_for_tuple!(0:T0,1:T1,2:T2,3:T3,4:T4,5:T5,6:T6);
124-
impl_bit_pack_for_tuple!(0:T0,1:T1,2:T2,3:T3,4:T4,5:T5,6:T6,7:T7);
125-
impl_bit_pack_for_tuple!(0:T0,1:T1,2:T2,3:T3,4:T4,5:T5,6:T6,7:T7,8:T8);
126-
impl_bit_pack_for_tuple!(0:T0,1:T1,2:T2,3:T3,4:T4,5:T5,6:T6,7:T7,8:T8,9:T9);
127-
128118
/// Implementation of [`Either X Y`](https://docs.ton.org/develop/data-formats/tl-b-types#either):
129119
/// ```tlb
130120
/// left$0 {X:Type} {Y:Type} value:X = Either X Y;

crates/contracts/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "ton-contracts"
3-
version = "0.6.2"
3+
version = "0.6.3"
44
edition.workspace = true
55
rust-version.workspace = true
66
repository.workspace = true

0 commit comments

Comments
 (0)