Skip to content

Commit 45efdc4

Browse files
committed
Refactor RawFeltVec
commit-id:30d7f8cd
1 parent f955261 commit 45efdc4

File tree

8 files changed

+66
-39
lines changed

8 files changed

+66
-39
lines changed

crates/cheatnet/src/runtime_extensions/call_to_blockifier_runtime_extension/execution/execution_info.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,8 @@ use cairo_vm::{
33
types::relocatable::{MaybeRelocatable, Relocatable},
44
vm::vm_core::VirtualMachine,
55
};
6-
use conversions::{
7-
IntoConv,
8-
serde::serialize::{SerializeToFeltVec, raw::RawFeltVec},
9-
};
6+
use conversions::serde::SerializedValue;
7+
use conversions::{IntoConv, serde::serialize::SerializeToFeltVec};
108
use starknet_types_core::felt::Felt;
119

1210
fn get_cheated_block_info_ptr(
@@ -90,8 +88,10 @@ fn get_cheated_tx_info_ptr(
9088
new_tx_info[7] = MaybeRelocatable::Int(nonce);
9189
}
9290
if let Some(resource_bounds) = resource_bounds {
93-
let (resource_bounds_start_ptr, resource_bounds_end_ptr) =
94-
add_vec_memory_segment(&RawFeltVec::new(resource_bounds).serialize_to_vec(), vm);
91+
let (resource_bounds_start_ptr, resource_bounds_end_ptr) = add_vec_memory_segment(
92+
&SerializedValue::new(resource_bounds).serialize_to_vec(),
93+
vm,
94+
);
9595
new_tx_info[8] = resource_bounds_start_ptr.into();
9696
new_tx_info[9] = resource_bounds_end_ptr.into();
9797
}

crates/conversions/src/serde.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,5 @@
11
pub mod deserialize;
22
pub mod serialize;
3+
pub mod serialized_value;
4+
5+
pub use serialized_value::SerializedValue;

crates/conversions/src/serde/deserialize/deserialize_impl.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,19 @@ where
5353
}
5454
}
5555

56+
impl<T: CairoDeserialize, E: CairoDeserialize> CairoDeserialize for Result<T, E> {
57+
fn deserialize(reader: &mut BufferReader<'_>) -> BufferReadResult<Self> {
58+
let variant: Felt = reader.read()?;
59+
let variant: usize = variant.to_usize().ok_or(BufferReadError::ParseFailed)?;
60+
61+
match variant {
62+
0 => Ok(Ok(reader.read()?)),
63+
1 => Ok(Err(reader.read()?)),
64+
_ => Err(BufferReadError::ParseFailed),
65+
}
66+
}
67+
}
68+
5669
impl CairoDeserialize for bool {
5770
fn deserialize(reader: &mut BufferReader<'_>) -> BufferReadResult<Self> {
5871
let num: usize = reader.read()?;

crates/conversions/src/serde/lib.rs

Lines changed: 0 additions & 2 deletions
This file was deleted.

crates/conversions/src/serde/serialize.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ use starknet_types_core::felt::Felt;
22

33
pub use cairo_serde_macros::CairoSerialize;
44

5-
pub mod raw;
65
mod serialize_impl;
76

87
pub struct BufferWriter {

crates/conversions/src/serde/serialize/raw.rs

Lines changed: 0 additions & 28 deletions
This file was deleted.
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
use conversions::serde::deserialize::{BufferReadResult, BufferReader, CairoDeserialize};
2+
use conversions::serde::serialize::{BufferWriter, CairoSerialize};
3+
use starknet_types_core::felt::Felt;
4+
5+
/// Represents an already serialized Vec of values.
6+
///
7+
/// Use this to omit adding extra felt for the length of the vector during serialization.
8+
#[derive(Debug)]
9+
pub struct SerializedValue<T>(pub Vec<T>)
10+
where
11+
T: CairoSerialize;
12+
13+
impl<T> SerializedValue<T>
14+
where
15+
T: CairoSerialize,
16+
{
17+
#[must_use]
18+
pub fn new(vec: Vec<T>) -> Self {
19+
Self(vec)
20+
}
21+
}
22+
23+
impl<T> CairoSerialize for SerializedValue<T>
24+
where
25+
T: CairoSerialize,
26+
{
27+
fn serialize(&self, output: &mut BufferWriter) {
28+
for e in &self.0 {
29+
e.serialize(output);
30+
}
31+
}
32+
}
33+
34+
impl CairoDeserialize for SerializedValue<Felt> {
35+
fn deserialize(reader: &mut BufferReader<'_>) -> BufferReadResult<Self> {
36+
let mut result: Vec<Felt> = Vec::new();
37+
while let Ok(r) = reader.read_felt() {
38+
result.push(r);
39+
}
40+
Ok(Self::new(result))
41+
}
42+
}

crates/runtime/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ use cairo_vm::vm::errors::vm_errors::VirtualMachineError;
1818
use cairo_vm::vm::runners::cairo_runner::{ResourceTracker, RunResources};
1919
use cairo_vm::vm::vm_core::VirtualMachine;
2020
use conversions::byte_array::ByteArray;
21+
use conversions::serde::SerializedValue;
2122
use conversions::serde::deserialize::BufferReadError;
2223
use conversions::serde::deserialize::BufferReader;
23-
use conversions::serde::serialize::raw::RawFeltVec;
2424
use conversions::serde::serialize::{CairoSerialize, SerializeToFeltVec};
2525
use indoc::indoc;
2626
use shared::vm::VirtualMachineExt;
@@ -294,7 +294,7 @@ impl<Extension: ExtensionLogic> ExtendedRuntime<Extension> {
294294
return res;
295295
}
296296
// it is serialized again to add `Result` discriminator
297-
Ok(CheatcodeHandlingResult::Handled(res)) => Ok(RawFeltVec::new(res)),
297+
Ok(CheatcodeHandlingResult::Handled(res)) => Ok(SerializedValue::new(res)),
298298
Err(err) => Err(ByteArray::from(err.to_string().as_str())),
299299
}
300300
.serialize_to_vec();

0 commit comments

Comments
 (0)