From 66f31c7b9d436405cd65072442a7c3da3674f340 Mon Sep 17 00:00:00 2001 From: Maddiaa <47148561+Maddiaa0@users.noreply.github.com> Date: Thu, 24 Oct 2024 18:26:32 +0800 Subject: [PATCH] feat(nr): serde for signed ints (#9211) --- .../crates/types/src/type_serialization.nr | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) diff --git a/noir-projects/noir-protocol-circuits/crates/types/src/type_serialization.nr b/noir-projects/noir-protocol-circuits/crates/types/src/type_serialization.nr index 829da563338..953ab67b50d 100644 --- a/noir-projects/noir-protocol-circuits/crates/types/src/type_serialization.nr +++ b/noir-projects/noir-protocol-circuits/crates/types/src/type_serialization.nr @@ -2,10 +2,15 @@ use crate::traits::{Serialize, Deserialize}; global BOOL_SERIALIZED_LEN: u32 = 1; global U8_SERIALIZED_LEN: u32 = 1; +global U16_SERIALIZED_LEN: u32 = 1; global U32_SERIALIZED_LEN: u32 = 1; global U64_SERIALIZED_LEN: u32 = 1; global U128_SERIALIZED_LEN: u32 = 1; global FIELD_SERIALIZED_LEN: u32 = 1; +global I8_SERIALIZED_LEN: u32 = 1; +global I16_SERIALIZED_LEN: u32 = 1; +global I32_SERIALIZED_LEN: u32 = 1; +global I64_SERIALIZED_LEN: u32 = 1; impl Serialize for bool { fn serialize(self) -> [Field; BOOL_SERIALIZED_LEN] { @@ -31,6 +36,18 @@ impl Deserialize for u8 { } } +impl Serialize for u16 { + fn serialize(self) -> [Field; U16_SERIALIZED_LEN] { + [self as Field] + } +} + +impl Deserialize for u16 { + fn deserialize(fields: [Field; U16_SERIALIZED_LEN]) -> Self { + fields[0] as u16 + } +} + impl Serialize for u32 { fn serialize(self) -> [Field; U32_SERIALIZED_LEN] { [self as Field] @@ -79,6 +96,54 @@ impl Deserialize for Field { } } +impl Serialize for i8 { + fn serialize(self) -> [Field; I8_SERIALIZED_LEN] { + [self as Field] + } +} + +impl Deserialize for i8 { + fn deserialize(fields: [Field; I8_SERIALIZED_LEN]) -> Self { + fields[0] as i8 + } +} + +impl Serialize for i16 { + fn serialize(self) -> [Field; I16_SERIALIZED_LEN] { + [self as Field] + } +} + +impl Deserialize for i16 { + fn deserialize(fields: [Field; I16_SERIALIZED_LEN]) -> Self { + fields[0] as i16 + } +} + +impl Serialize for i32 { + fn serialize(self) -> [Field; I32_SERIALIZED_LEN] { + [self as Field] + } +} + +impl Deserialize for i32 { + fn deserialize(fields: [Field; I32_SERIALIZED_LEN]) -> Self { + fields[0] as i32 + } +} + +impl Serialize for i64 { + fn serialize(self) -> [Field; I64_SERIALIZED_LEN] { + [self as Field] + } +} + +impl Deserialize for i64 { + fn deserialize(fields: [Field; I64_SERIALIZED_LEN]) -> Self { + fields[0] as i64 + } +} + impl Serialize for [T; N] where T: Serialize, @@ -106,3 +171,33 @@ where reader.read_struct_array::(Deserialize::deserialize, result) } } + +#[test] +fn test_u16_serialization() { + let a: u16 = 10; + assert_eq(a, u16::deserialize(a.serialize())); +} + +#[test] +fn test_i8_serialization() { + let a: i8 = -10; + assert_eq(a, i8::deserialize(a.serialize())); +} + +#[test] +fn test_i16_serialization() { + let a: i16 = -10; + assert_eq(a, i16::deserialize(a.serialize())); +} + +#[test] +fn test_i32_serialization() { + let a: i32 = -10; + assert_eq(a, i32::deserialize(a.serialize())); +} + +#[test] +fn test_i64_serialization() { + let a: i64 = -10; + assert_eq(a, i64::deserialize(a.serialize())); +}