Implement Encode for tuples with up-to 16 elements. (#583)

This makes it match the implementation for Decode which is
already supports up to 16 fields.

Signed-off-by: Gerd Zellweger <mail@gerdzellweger.com>

Signed-off-by: Gerd Zellweger <mail@gerdzellweger.com>
This commit is contained in:
Gerd Zellweger 2022-09-28 00:42:04 -07:00 committed by GitHub
parent cafb13eb95
commit 954abe415e
1 changed files with 266 additions and 0 deletions

View File

@ -136,3 +136,269 @@ where
Ok(())
}
}
impl<A, B, C, D, E, F, G, H, I> Encode for (A, B, C, D, E, F, G, H, I)
where
A: Encode,
B: Encode,
C: Encode,
D: Encode,
E: Encode,
F: Encode,
G: Encode,
H: Encode,
I: Encode,
{
fn encode<_E: Encoder>(&self, encoder: &mut _E) -> Result<(), EncodeError> {
self.0.encode(encoder)?;
self.1.encode(encoder)?;
self.2.encode(encoder)?;
self.3.encode(encoder)?;
self.4.encode(encoder)?;
self.5.encode(encoder)?;
self.6.encode(encoder)?;
self.7.encode(encoder)?;
self.8.encode(encoder)?;
Ok(())
}
}
impl<A, B, C, D, E, F, G, H, I, J> Encode for (A, B, C, D, E, F, G, H, I, J)
where
A: Encode,
B: Encode,
C: Encode,
D: Encode,
E: Encode,
F: Encode,
G: Encode,
H: Encode,
I: Encode,
J: Encode,
{
fn encode<_E: Encoder>(&self, encoder: &mut _E) -> Result<(), EncodeError> {
self.0.encode(encoder)?;
self.1.encode(encoder)?;
self.2.encode(encoder)?;
self.3.encode(encoder)?;
self.4.encode(encoder)?;
self.5.encode(encoder)?;
self.6.encode(encoder)?;
self.7.encode(encoder)?;
self.8.encode(encoder)?;
self.9.encode(encoder)?;
Ok(())
}
}
impl<A, B, C, D, E, F, G, H, I, J, K> Encode for (A, B, C, D, E, F, G, H, I, J, K)
where
A: Encode,
B: Encode,
C: Encode,
D: Encode,
E: Encode,
F: Encode,
G: Encode,
H: Encode,
I: Encode,
J: Encode,
K: Encode,
{
fn encode<_E: Encoder>(&self, encoder: &mut _E) -> Result<(), EncodeError> {
self.0.encode(encoder)?;
self.1.encode(encoder)?;
self.2.encode(encoder)?;
self.3.encode(encoder)?;
self.4.encode(encoder)?;
self.5.encode(encoder)?;
self.6.encode(encoder)?;
self.7.encode(encoder)?;
self.8.encode(encoder)?;
self.9.encode(encoder)?;
self.10.encode(encoder)?;
Ok(())
}
}
impl<A, B, C, D, E, F, G, H, I, J, K, L> Encode for (A, B, C, D, E, F, G, H, I, J, K, L)
where
A: Encode,
B: Encode,
C: Encode,
D: Encode,
E: Encode,
F: Encode,
G: Encode,
H: Encode,
I: Encode,
J: Encode,
K: Encode,
L: Encode,
{
fn encode<_E: Encoder>(&self, encoder: &mut _E) -> Result<(), EncodeError> {
self.0.encode(encoder)?;
self.1.encode(encoder)?;
self.2.encode(encoder)?;
self.3.encode(encoder)?;
self.4.encode(encoder)?;
self.5.encode(encoder)?;
self.6.encode(encoder)?;
self.7.encode(encoder)?;
self.8.encode(encoder)?;
self.9.encode(encoder)?;
self.10.encode(encoder)?;
self.11.encode(encoder)?;
Ok(())
}
}
impl<A, B, C, D, E, F, G, H, I, J, K, L, M> Encode for (A, B, C, D, E, F, G, H, I, J, K, L, M)
where
A: Encode,
B: Encode,
C: Encode,
D: Encode,
E: Encode,
F: Encode,
G: Encode,
H: Encode,
I: Encode,
J: Encode,
K: Encode,
L: Encode,
M: Encode,
{
fn encode<_E: Encoder>(&self, encoder: &mut _E) -> Result<(), EncodeError> {
self.0.encode(encoder)?;
self.1.encode(encoder)?;
self.2.encode(encoder)?;
self.3.encode(encoder)?;
self.4.encode(encoder)?;
self.5.encode(encoder)?;
self.6.encode(encoder)?;
self.7.encode(encoder)?;
self.8.encode(encoder)?;
self.9.encode(encoder)?;
self.10.encode(encoder)?;
self.11.encode(encoder)?;
self.12.encode(encoder)?;
Ok(())
}
}
impl<A, B, C, D, E, F, G, H, I, J, K, L, M, N> Encode for (A, B, C, D, E, F, G, H, I, J, K, L, M, N)
where
A: Encode,
B: Encode,
C: Encode,
D: Encode,
E: Encode,
F: Encode,
G: Encode,
H: Encode,
I: Encode,
J: Encode,
K: Encode,
L: Encode,
M: Encode,
N: Encode,
{
fn encode<_E: Encoder>(&self, encoder: &mut _E) -> Result<(), EncodeError> {
self.0.encode(encoder)?;
self.1.encode(encoder)?;
self.2.encode(encoder)?;
self.3.encode(encoder)?;
self.4.encode(encoder)?;
self.5.encode(encoder)?;
self.6.encode(encoder)?;
self.7.encode(encoder)?;
self.8.encode(encoder)?;
self.9.encode(encoder)?;
self.10.encode(encoder)?;
self.11.encode(encoder)?;
self.12.encode(encoder)?;
self.13.encode(encoder)?;
Ok(())
}
}
impl<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O> Encode
for (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O)
where
A: Encode,
B: Encode,
C: Encode,
D: Encode,
E: Encode,
F: Encode,
G: Encode,
H: Encode,
I: Encode,
J: Encode,
K: Encode,
L: Encode,
M: Encode,
N: Encode,
O: Encode,
{
fn encode<_E: Encoder>(&self, encoder: &mut _E) -> Result<(), EncodeError> {
self.0.encode(encoder)?;
self.1.encode(encoder)?;
self.2.encode(encoder)?;
self.3.encode(encoder)?;
self.4.encode(encoder)?;
self.5.encode(encoder)?;
self.6.encode(encoder)?;
self.7.encode(encoder)?;
self.8.encode(encoder)?;
self.9.encode(encoder)?;
self.10.encode(encoder)?;
self.11.encode(encoder)?;
self.12.encode(encoder)?;
self.13.encode(encoder)?;
self.14.encode(encoder)?;
Ok(())
}
}
impl<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P> Encode
for (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P)
where
A: Encode,
B: Encode,
C: Encode,
D: Encode,
E: Encode,
F: Encode,
G: Encode,
H: Encode,
I: Encode,
J: Encode,
K: Encode,
L: Encode,
M: Encode,
N: Encode,
O: Encode,
P: Encode,
{
fn encode<_E: Encoder>(&self, encoder: &mut _E) -> Result<(), EncodeError> {
self.0.encode(encoder)?;
self.1.encode(encoder)?;
self.2.encode(encoder)?;
self.3.encode(encoder)?;
self.4.encode(encoder)?;
self.5.encode(encoder)?;
self.6.encode(encoder)?;
self.7.encode(encoder)?;
self.8.encode(encoder)?;
self.9.encode(encoder)?;
self.10.encode(encoder)?;
self.11.encode(encoder)?;
self.12.encode(encoder)?;
self.13.encode(encoder)?;
self.14.encode(encoder)?;
self.15.encode(encoder)?;
Ok(())
}
}