From 2e04e7c85c83a8ffe12253b7a8cf47e80650d277 Mon Sep 17 00:00:00 2001 From: Anthony Graignic <anthony.graignic@uca.fr> Date: Wed, 10 Jan 2024 14:14:58 +0100 Subject: [PATCH 1/2] Update serialization of MobilityRecord Fix potential empty output --- src/utils/mobility_data.rs | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/src/utils/mobility_data.rs b/src/utils/mobility_data.rs index edc15bf..44d77f1 100644 --- a/src/utils/mobility_data.rs +++ b/src/utils/mobility_data.rs @@ -6,7 +6,7 @@ use ethers::{ types::Bytes, }; use primitive_types::U256; -use serde::Deserialize; +use serde::{Deserialize, Serialize}; use time::OffsetDateTime; /// Mobility Record from Public Transportation @@ -15,7 +15,7 @@ use time::OffsetDateTime; /// /// CSV header: /// id user_id network service label created_at from_coord from_label from_datetime from_latitude from_longitude to_coord to_label to_datetime to_latitude to_longitude -#[derive(Debug, Deserialize, Clone)] +#[derive(Clone, Debug, Deserialize, Serialize)] pub struct MobilityRecord { pub id: u64, pub user_id: u64, @@ -44,18 +44,12 @@ pub struct MobilityRecord { } impl MobilityRecord { - unsafe fn any_as_u8_slice<T: Sized>(p: &T) -> &[u8] { - ::core::slice::from_raw_parts((p as *const T) as *const u8, ::core::mem::size_of::<T>()) - } + // Convert to a byte array + // TODO: update serialization when CSV struct is final pub fn to_bytes(&self) -> Bytes { - let bytes: &[u8] = unsafe { - ::core::slice::from_raw_parts( - (self as *const MobilityRecord) as *const u8, - ::core::mem::size_of::<MobilityRecord>(), - ) - }; - - Bytes::from_static(bytes) + let serialized_mobility_record = serde_json::to_string(self).unwrap(); + let bytes = serialized_mobility_record.as_bytes(); + Bytes::from(bytes.to_vec()) } } @@ -192,7 +186,8 @@ mod tests { // FIXME Binary data change between tests o assert!(!result.to_string().is_empty()); - // assert_eq!("0x", result.to_string()); + assert_eq!("0x7b226964223a313333372c22757365725f6964223a312c226e6574776f726b223a226d756c686f757365222c2273657276696365223a225055424c49435f5452414e53504f5254222c226c6162656c223a22424c41424c41424c41222c22637265617465645f6174223a22323032332d31312d30375431303a33353a30385a222c2266726f6d5f636f6f7264223a6e756c6c2c2266726f6d5f6c6162656c223a6e756c6c2c2266726f6d5f6461746574696d65223a6e756c6c2c2266726f6d5f6c61746974756465223a6e756c6c2c2266726f6d5f6c6f6e676974756465223a6e756c6c2c22746f5f636f6f7264223a6e756c6c2c22746f5f6c6162656c223a6e756c6c2c22746f5f6461746574696d65223a6e756c6c2c22746f5f6c61746974756465223a6e756c6c2c22746f5f6c6f6e676974756465223a6e756c6c7d", + result.to_string()); } #[test] -- GitLab From ec9fa9fdb653a9a7916544c99e7426a6832186a6 Mon Sep 17 00:00:00 2001 From: Anthony Graignic <anthony.graignic@uca.fr> Date: Wed, 10 Jan 2024 15:10:19 +0100 Subject: [PATCH 2/2] Replace default input bytes in Bx simulation with real ones --- src/main.rs | 2 +- src/utils/mobility_data.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index b59a281..beedb7c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -292,7 +292,7 @@ async fn main() -> Result<(), anyhow::Error> { chain_id, time_since_beginning, simulation_behavior.quantity, - Bytes::default(), // Bytes::from_static(&behavior.mobility_record), + simulation_behavior.mobility_record.to_bytes() ).await; info!("Sent bx({:?}): {:?}",simulation_behavior.id,bx_hash); } diff --git a/src/utils/mobility_data.rs b/src/utils/mobility_data.rs index 44d77f1..3640577 100644 --- a/src/utils/mobility_data.rs +++ b/src/utils/mobility_data.rs @@ -45,7 +45,7 @@ pub struct MobilityRecord { impl MobilityRecord { // Convert to a byte array - // TODO: update serialization when CSV struct is final + // TODO: update serialization when CSV struct is in final version pub fn to_bytes(&self) -> Bytes { let serialized_mobility_record = serde_json::to_string(self).unwrap(); let bytes = serialized_mobility_record.as_bytes(); -- GitLab