summaryrefslogtreecommitdiff
path: root/serde_v8/ser.rs
diff options
context:
space:
mode:
authorLuca Casonato <hello@lcas.dev>2023-03-16 17:59:47 +0100
committerGitHub <noreply@github.com>2023-03-16 16:59:47 +0000
commitb99c431ac78810034ea57cc778bf57d627998aa9 (patch)
tree4398efcd8d3757e42a5cd4bdcee4ed9533103f43 /serde_v8/ser.rs
parent1a3c2e2f1dc5add94b5b7ff4ba4c26df55c7a011 (diff)
feat(serde_v8): support BigInt serialization (#18225)
This commit enables serializing `v8::BigInt` to `num_bigint::BigInt` in Rust. Pre-requisite for sub upcoming feature work.
Diffstat (limited to 'serde_v8/ser.rs')
-rw-r--r--serde_v8/ser.rs8
1 files changed, 8 insertions, 0 deletions
diff --git a/serde_v8/ser.rs b/serde_v8/ser.rs
index fa4cfecde..6c10f3fb4 100644
--- a/serde_v8/ser.rs
+++ b/serde_v8/ser.rs
@@ -14,6 +14,7 @@ use crate::magic::transl8::opaque_recv;
use crate::magic::transl8::MagicType;
use crate::magic::transl8::ToV8;
use crate::magic::transl8::MAGIC_FIELD;
+use crate::BigInt;
use crate::ByteString;
use crate::DetachedBuffer;
use crate::ExternalPointer;
@@ -277,6 +278,7 @@ pub enum StructSerializers<'a, 'b, 'c> {
MagicByteString(MagicalSerializer<'a, 'b, 'c, ByteString>),
MagicU16String(MagicalSerializer<'a, 'b, 'c, U16String>),
MagicStringOrBuffer(MagicalSerializer<'a, 'b, 'c, StringOrBuffer>),
+ MagicBigInt(MagicalSerializer<'a, 'b, 'c, BigInt>),
Regular(ObjectSerializer<'a, 'b, 'c>),
}
@@ -299,6 +301,7 @@ impl<'a, 'b, 'c> ser::SerializeStruct for StructSerializers<'a, 'b, 'c> {
StructSerializers::MagicStringOrBuffer(s) => {
s.serialize_field(key, value)
}
+ StructSerializers::MagicBigInt(s) => s.serialize_field(key, value),
StructSerializers::Regular(s) => s.serialize_field(key, value),
}
}
@@ -312,6 +315,7 @@ impl<'a, 'b, 'c> ser::SerializeStruct for StructSerializers<'a, 'b, 'c> {
StructSerializers::MagicByteString(s) => s.end(),
StructSerializers::MagicU16String(s) => s.end(),
StructSerializers::MagicStringOrBuffer(s) => s.end(),
+ StructSerializers::MagicBigInt(s) => s.end(),
StructSerializers::Regular(s) => s.end(),
}
}
@@ -592,6 +596,10 @@ impl<'a, 'b, 'c> ser::Serializer for Serializer<'a, 'b, 'c> {
let m = MagicalSerializer::<StringOrBuffer>::new(self.scope);
Ok(StructSerializers::MagicStringOrBuffer(m))
}
+ BigInt::MAGIC_NAME => {
+ let m = MagicalSerializer::<BigInt>::new(self.scope);
+ Ok(StructSerializers::MagicBigInt(m))
+ }
magic::Value::MAGIC_NAME => {
let m = MagicalSerializer::<magic::Value<'a>>::new(self.scope);
Ok(StructSerializers::Magic(m))