Skip to content

Commit

Permalink
Impl generic serialization for suffixed ver
Browse files Browse the repository at this point in the history
  • Loading branch information
fmoletta committed Apr 17, 2024
1 parent c79c02a commit f8e8029
Show file tree
Hide file tree
Showing 3 changed files with 90 additions and 1 deletion.
88 changes: 88 additions & 0 deletions vm/src/types/builtin_name.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
use serde::{Deserialize, Serialize};

#[cfg(all(feature = "arbitrary", feature = "std"))]
use arbitrary::{self, Arbitrary};

// This enum is used to deserialize program builtins into &str and catch non-valid names
#[cfg_attr(all(feature = "arbitrary", feature = "std"), derive(Arbitrary))]

Check warning on line 7 in vm/src/types/builtin_name.rs

View check run for this annotation

Codecov / codecov/patch

vm/src/types/builtin_name.rs#L7

Added line #L7 was not covered by tests
#[derive(Serialize, Deserialize, Debug, PartialEq, Copy, Clone, Eq, Hash)]
#[allow(non_camel_case_types)]
pub enum BuiltinName {
output,
range_check,
pedersen,
ecdsa,
keccak,
bitwise,
ec_op,
poseidon,
segment_arena,
range_check96,
add_mod,
mul_mod,
}

impl BuiltinName {
pub fn to_str_with_suffix(&self) -> &'static str {
match self {
BuiltinName::output => "output_builtin",
BuiltinName::range_check => "range_check_builtin",
BuiltinName::pedersen => "pedersen_builtin",
BuiltinName::ecdsa => "ecdsa_builtin",
BuiltinName::keccak => "keccak_builtin",
BuiltinName::bitwise => "bitwise_builtin",
BuiltinName::ec_op => "ec_op_builtin",
BuiltinName::poseidon => "poseidon_builtin",
BuiltinName::segment_arena => "segment_arena_builtin",

Check warning on line 36 in vm/src/types/builtin_name.rs

View check run for this annotation

Codecov / codecov/patch

vm/src/types/builtin_name.rs#L36

Added line #L36 was not covered by tests
BuiltinName::range_check96 => "range_check96_builtin",
BuiltinName::add_mod => "add_mod_builtin",
BuiltinName::mul_mod => "mul_mod_builtin",

Check warning on line 39 in vm/src/types/builtin_name.rs

View check run for this annotation

Codecov / codecov/patch

vm/src/types/builtin_name.rs#L38-L39

Added lines #L38 - L39 were not covered by tests
}
}
}

impl BuiltinName {
pub fn to_str(&self) -> &'static str {
match self {
BuiltinName::output => "output",
BuiltinName::range_check => "range_check",
BuiltinName::pedersen => "pedersen",
BuiltinName::ecdsa => "ecdsa",
BuiltinName::keccak => "keccak",

Check warning on line 51 in vm/src/types/builtin_name.rs

View check run for this annotation

Codecov / codecov/patch

vm/src/types/builtin_name.rs#L49-L51

Added lines #L49 - L51 were not covered by tests
BuiltinName::bitwise => "bitwise",
BuiltinName::ec_op => "ec_op",
BuiltinName::poseidon => "poseidon",
BuiltinName::segment_arena => "segment_arena",
BuiltinName::range_check96 => "range_check96",
BuiltinName::add_mod => "add_mod",
BuiltinName::mul_mod => "mul_mod",

Check warning on line 58 in vm/src/types/builtin_name.rs

View check run for this annotation

Codecov / codecov/patch

vm/src/types/builtin_name.rs#L53-L58

Added lines #L53 - L58 were not covered by tests
}
}
}

impl core::fmt::Display for BuiltinName {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
self.to_str_with_suffix().fmt(f)
}

Check warning on line 66 in vm/src/types/builtin_name.rs

View check run for this annotation

Codecov / codecov/patch

vm/src/types/builtin_name.rs#L64-L66

Added lines #L64 - L66 were not covered by tests
}

pub(crate) mod serde_impl {
use super::BuiltinName;
use serde::{Serializer, Serialize, ser::SerializeMap};
use crate::stdlib::collections::HashMap;

pub fn serialize_builtin_name_map_with_suffix<S, V>(
values: &HashMap<BuiltinName, V>,
serializer: S,
) -> Result<S::Ok, S::Error>
where
S: Serializer,
V: Serialize,
{
let mut map_serializer = serializer.serialize_map(Some(values.len()))?;
for (key, val) in values {
map_serializer.serialize_entry(key.to_str_with_suffix(), val)?
}
map_serializer.end()
}
}
2 changes: 1 addition & 1 deletion vm/src/vm/runners/cairo_pie.rs
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ pub struct CairoPie {
pub metadata: CairoPieMetadata,
pub memory: CairoPieMemory,
pub execution_resources: ExecutionResources,
//#[serde(serialize_with = "serde_impl::serialize_additional_data")]
#[serde(serialize_with = "crate::types::builtin_name::serde_impl::serialize_builtin_name_map_with_suffix")]
pub additional_data: HashMap<BuiltinName, BuiltinAdditionalData>,
pub version: CairoPieVersion,
}
Expand Down
1 change: 1 addition & 0 deletions vm/src/vm/runners/cairo_runner.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1529,6 +1529,7 @@ pub struct SegmentInfo {
pub struct ExecutionResources {
pub n_steps: usize,
pub n_memory_holes: usize,
#[serde(serialize_with = "crate::types::builtin_name::serde_impl::serialize_builtin_name_map_with_suffix")]
pub builtin_instance_counter: HashMap<BuiltinName, usize>,
}

Expand Down

0 comments on commit f8e8029

Please sign in to comment.