From 042c13c8a99458db26254cba1272d557af1023d0 Mon Sep 17 00:00:00 2001 From: pengiie Date: Fri, 14 Nov 2025 15:55:46 -0700 Subject: [PATCH 1/2] Exposed typed result for ser::erased::Serializer --- src/ser.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/ser.rs b/src/ser.rs index 5507a30..64c940b 100644 --- a/src/ser.rs +++ b/src/ser.rs @@ -287,6 +287,15 @@ mod erase { _ => unreachable!(), } } + + /// Takes the stored result of the erased serializer after serializing. + pub fn result(self) -> Result { + match self { + Serializer::Complete(ok) => Ok(ok), + Serializer::Error(err) => Err(err), + _ => panic!("Tried to take result of serializer before serializing or finished serializing an object.") + } + } } } From d8f3b5f0cf11d5c632876d86f03262aa71aa9178 Mon Sep 17 00:00:00 2001 From: pengiie Date: Sun, 7 Dec 2025 19:15:08 -0700 Subject: [PATCH 2/2] Convert ser error --- src/lib.rs | 2 +- src/ser.rs | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index ba53312..6c987c7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -136,7 +136,7 @@ mod ser; pub use crate::de::{deserialize, Deserializer}; pub use crate::error::{Error, Result}; -pub use crate::ser::{serialize, Serialize, Serializer}; +pub use crate::ser::{convert_ser_error, serialize, Serialize, Serializer}; // Not public API. #[doc(hidden)] diff --git a/src/ser.rs b/src/ser.rs index 64c940b..234d094 100644 --- a/src/ser.rs +++ b/src/ser.rs @@ -697,6 +697,16 @@ where } } +/// Converts the result from a Serializer::erase_xxx function into a public-api result. +pub fn convert_ser_error(err: ErrorImpl) -> crate::Error { + match err { + ErrorImpl::ShortCircuit => { + serde::ser::Error::custom("Call `serializer::result()` to find out the error.") + } + ErrorImpl::Custom(msg) => serde::ser::Error::custom(msg), + } +} + serialize_trait_object!(Serialize); struct MakeSerializer(TraitObject);