Skip to content

Commit 2fb1cab

Browse files
committed
Refactor RawFeltVec
commit-id:30d7f8cd
1 parent 975c55c commit 2fb1cab

File tree

8 files changed

+65
-39
lines changed

8 files changed

+65
-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::NoLengthFeltVec;
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+
&NoLengthFeltVec::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;
2+
pub mod no_length_felt_vec;
23
pub mod serialize;
4+
5+
pub use no_length_felt_vec::NoLengthFeltVec;

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.
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
use conversions::serde::deserialize::{BufferReadResult, BufferReader, CairoDeserialize};
2+
use conversions::serde::serialize::{BufferWriter, CairoSerialize};
3+
use starknet_types_core::felt::Felt;
4+
5+
/// use this wrapper to NOT add extra length felt
6+
/// useful e.g. when you need to pass an already serialized value
7+
#[derive(Debug)]
8+
pub struct NoLengthFeltVec<T>(pub Vec<T>)
9+
where
10+
T: CairoSerialize;
11+
12+
impl<T> NoLengthFeltVec<T>
13+
where
14+
T: CairoSerialize,
15+
{
16+
#[must_use]
17+
pub fn new(vec: Vec<T>) -> Self {
18+
Self(vec)
19+
}
20+
}
21+
22+
impl<T> CairoSerialize for NoLengthFeltVec<T>
23+
where
24+
T: CairoSerialize,
25+
{
26+
fn serialize(&self, output: &mut BufferWriter) {
27+
for e in &self.0 {
28+
e.serialize(output);
29+
}
30+
}
31+
}
32+
33+
impl CairoDeserialize for NoLengthFeltVec<Felt> {
34+
fn deserialize(reader: &mut BufferReader<'_>) -> BufferReadResult<Self> {
35+
let mut result: Vec<Felt> = Vec::new();
36+
while let Ok(r) = reader.read_felt() {
37+
result.push(r);
38+
}
39+
Ok(Self::new(result))
40+
}
41+
}

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.

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::NoLengthFeltVec;
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(NoLengthFeltVec::new(res)),
298298
Err(err) => Err(ByteArray::from(err.to_string().as_str())),
299299
}
300300
.serialize_to_vec();

0 commit comments

Comments
 (0)