From e09040f976d5cfa4f5a10832ff8083393afc1ac2 Mon Sep 17 00:00:00 2001 From: igamigo Date: Wed, 7 Aug 2024 16:14:18 -0300 Subject: [PATCH] fix: Felt serde (#883) * fix: Element serde * chore: Revert cargo toml changes * fix: Use &str * feat: Build all examples on compile job * Fix job * Fix job * Change job to build worksapce --------- Co-authored-by: Diego K <43053772+diegokingston@users.noreply.github.com> --- .github/workflows/ci.yaml | 4 ++++ examples/merkle-tree-cli/Cargo.toml | 2 +- math/src/field/element.rs | 9 +++++---- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 787959e8d..9eaa8983e 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -52,6 +52,10 @@ jobs: cd ensure-no_std cargo build + - name: Run cargo build for all workspace + run: | + cargo build --workspace + - name: Run cargo build ensure-no_std crate for wasm run: | cd ensure-no_std diff --git a/examples/merkle-tree-cli/Cargo.toml b/examples/merkle-tree-cli/Cargo.toml index 3c3e2714c..326ea2422 100644 --- a/examples/merkle-tree-cli/Cargo.toml +++ b/examples/merkle-tree-cli/Cargo.toml @@ -11,7 +11,7 @@ path = "src/main.rs" [dependencies] clap = { version = "4.4.6", features = ["derive"] } -lambdaworks-crypto = { workspace = true } +lambdaworks-crypto = { workspace = true, features = ["serde"]} lambdaworks-math = { workspace = true, features = ["lambdaworks-serde-string"] } serde = { version = "1.0" } serde_json = "1" diff --git a/math/src/field/element.rs b/math/src/field/element.rs index bdffa05ec..cc8055fbc 100644 --- a/math/src/field/element.rs +++ b/math/src/field/element.rs @@ -552,6 +552,7 @@ impl Serialize for FieldElement { where S: Serializer, { + use crate::alloc::string::ToString; let mut state = serializer.serialize_struct("FieldElement", 1)?; state.serialize_field("value", &F::representative(self.value()).to_string())?; state.end() @@ -653,7 +654,7 @@ impl<'de, F: IsPrimeField> Deserialize<'de> for FieldElement { where M: MapAccess<'de>, { - let mut value = None; + let mut value: Option<&str> = None; while let Some(key) = map.next_key()? { match key { Field::Value => { @@ -665,14 +666,14 @@ impl<'de, F: IsPrimeField> Deserialize<'de> for FieldElement { } } let value = value.ok_or_else(|| de::Error::missing_field("value"))?; - Ok(FieldElement::from_hex(&value).unwrap()) + FieldElement::from_hex(&value).map_err(|_| de::Error::custom("invalid hex")) } fn visit_seq(self, mut seq: S) -> Result, S::Error> where S: SeqAccess<'de>, { - let mut value = None; + let mut value: Option<&str> = None; while let Some(val) = seq.next_element()? { if value.is_some() { return Err(de::Error::duplicate_field("value")); @@ -680,7 +681,7 @@ impl<'de, F: IsPrimeField> Deserialize<'de> for FieldElement { value = Some(val); } let value = value.ok_or_else(|| de::Error::missing_field("value"))?; - Ok(FieldElement::from_hex(&value).unwrap()) + FieldElement::from_hex(&value).map_err(|_| de::Error::custom("invalid hex")) } }