diff options
Diffstat (limited to 'serde_v8/ser.rs')
-rw-r--r-- | serde_v8/ser.rs | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/serde_v8/ser.rs b/serde_v8/ser.rs index 834efa78a..fa4cfecde 100644 --- a/serde_v8/ser.rs +++ b/serde_v8/ser.rs @@ -16,6 +16,7 @@ use crate::magic::transl8::ToV8; use crate::magic::transl8::MAGIC_FIELD; use crate::ByteString; use crate::DetachedBuffer; +use crate::ExternalPointer; use crate::StringOrBuffer; use crate::U16String; use crate::ZeroCopyBuf; @@ -269,6 +270,7 @@ impl<'a, 'b, 'c, T: MagicType + ToV8> ser::SerializeStruct // Dispatches between magic and regular struct serializers pub enum StructSerializers<'a, 'b, 'c> { + ExternalPointer(MagicalSerializer<'a, 'b, 'c, magic::ExternalPointer>), Magic(MagicalSerializer<'a, 'b, 'c, magic::Value<'a>>), ZeroCopyBuf(MagicalSerializer<'a, 'b, 'c, ZeroCopyBuf>), MagicDetached(MagicalSerializer<'a, 'b, 'c, DetachedBuffer>), @@ -288,6 +290,7 @@ impl<'a, 'b, 'c> ser::SerializeStruct for StructSerializers<'a, 'b, 'c> { value: &T, ) -> Result<()> { match self { + StructSerializers::ExternalPointer(s) => s.serialize_field(key, value), StructSerializers::Magic(s) => s.serialize_field(key, value), StructSerializers::ZeroCopyBuf(s) => s.serialize_field(key, value), StructSerializers::MagicDetached(s) => s.serialize_field(key, value), @@ -302,6 +305,7 @@ impl<'a, 'b, 'c> ser::SerializeStruct for StructSerializers<'a, 'b, 'c> { fn end(self) -> JsResult<'a> { match self { + StructSerializers::ExternalPointer(s) => s.end(), StructSerializers::Magic(s) => s.end(), StructSerializers::ZeroCopyBuf(s) => s.end(), StructSerializers::MagicDetached(s) => s.end(), @@ -385,8 +389,8 @@ macro_rules! forward_to { }; } -const MAX_SAFE_INTEGER: i64 = (1 << 53) - 1; -const MIN_SAFE_INTEGER: i64 = -MAX_SAFE_INTEGER; +pub(crate) const MAX_SAFE_INTEGER: i64 = (1 << 53) - 1; +pub(crate) const MIN_SAFE_INTEGER: i64 = -MAX_SAFE_INTEGER; impl<'a, 'b, 'c> ser::Serializer for Serializer<'a, 'b, 'c> { type Ok = v8::Local<'a, v8::Value>; @@ -564,6 +568,10 @@ impl<'a, 'b, 'c> ser::Serializer for Serializer<'a, 'b, 'c> { len: usize, ) -> Result<Self::SerializeStruct> { match name { + magic::ExternalPointer::MAGIC_NAME => { + let m = MagicalSerializer::<ExternalPointer>::new(self.scope); + Ok(StructSerializers::ExternalPointer(m)) + } ByteString::MAGIC_NAME => { let m = MagicalSerializer::<ByteString>::new(self.scope); Ok(StructSerializers::MagicByteString(m)) |