Skip to content

Commit 75d4a50

Browse files
committed
fix(BigInt): use base64 for byte encoding
1 parent cb0d740 commit 75d4a50

File tree

4 files changed

+17
-2
lines changed

4 files changed

+17
-2
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@ keywords = ["debugging", "development-tools"]
1212
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
1313

1414
[dependencies]
15+
base64 = "0.22.1"
1516
num-traits = "0.2"
1617
num-derive = "0.4"
1718
serde = { version = "1.0", features = ["derive"] }
1819
serde_json = "1.0"
19-
serde_bytes = "0.11.17"
2020
serde_repr = "0.1"
2121

2222
[lib]

src/base64.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
use base64::Engine;
2+
use serde::{Deserialize, Serialize};
3+
use serde::{Deserializer, Serializer};
4+
5+
pub fn serialize<S: Serializer>(v: &Vec<u8>, s: S) -> Result<S::Ok, S::Error> {
6+
let base64 = base64::engine::general_purpose::STANDARD.encode(v);
7+
String::serialize(&base64, s)
8+
}
9+
10+
pub fn deserialize<'de, D: Deserializer<'de>>(d: D) -> Result<Vec<u8>, D::Error> {
11+
let base64 = String::deserialize(d)?;
12+
base64::engine::general_purpose::STANDARD.decode(base64.as_bytes()).map_err(serde::de::Error::custom)
13+
}

src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
//! The format is documented in `docs/` and the README.
1111
mod tracer;
1212
mod types;
13+
mod base64;
1314
pub use crate::tracer::{Tracer, NONE_TYPE_ID, NONE_VALUE};
1415
pub use crate::types::*;
1516

src/types.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use std::path::PathBuf;
99
use num_derive::FromPrimitive;
1010
use serde::{Deserialize, Serialize};
1111
use serde_repr::*;
12+
use crate::base64;
1213

1314
// currently, we do assume that we record the whole program
1415
// so, we try to include minimal amount of data,
@@ -387,7 +388,7 @@ pub enum ValueRecord {
387388
place: Place,
388389
},
389390
BigInt {
390-
#[serde(with = "serde_bytes")]
391+
#[serde(with = "base64")]
391392
b: Vec<u8>, // Base64 encoded bytes of a big-endian unsigned integer
392393
negative: bool,
393394
type_id: TypeId,

0 commit comments

Comments
 (0)