pub struct DocumentShapeSerializer { /* private fields */ }Expand description
Builds a [DiscriminatedDocument] from a typed shape via the
ShapeSerializer interface.
See the module-level documentation for an overview.
§Discriminator capture
Top-level discriminator capture (e.g. via
DiscriminatedDocument::from_struct
or via direct calls like ser.write_struct(&MY_SCHEMA, ...)) goes
through the inherent DocumentShapeSerializer::write_struct
method, which captures the schema’s shape ID into the serializer’s
root_discriminator slot.
Nested discriminator capture (a struct member that is itself a
struct, called through value.serialize_members(&mut dyn ShapeSerializer))
is not preserved, because [Document] has no per-node
discriminator slot — only the outer
[DiscriminatedDocument] wrapper carries one. Discriminators apply
at the wrapper level, not at every nested struct.
§Example
Use DiscriminatedDocument::from_struct
for the common case of converting a SerializableStruct into a
[DiscriminatedDocument]:
use aws_smithy_schema::document::DiscriminatedDocumentExt;
use aws_smithy_types::DiscriminatedDocument;
let doc = DiscriminatedDocument::from_struct(MyStruct::SCHEMA, &my_struct)?;Direct construction is useful when round-tripping pieces of a tree outside the standard entry point:
use aws_smithy_schema::document::DocumentShapeSerializer;
use aws_smithy_schema::serde::ShapeSerializer;
let mut ser = DocumentShapeSerializer::new();
ser.write_string(&aws_smithy_schema::prelude::STRING, "hello")?;
let doc = ser.finish()?;Implementations§
Source§impl DocumentShapeSerializer
impl DocumentShapeSerializer
Sourcepub fn finish(self) -> Result<DiscriminatedDocument, SerdeError>
pub fn finish(self) -> Result<DiscriminatedDocument, SerdeError>
Consumes the serializer and returns the constructed
[DiscriminatedDocument].
The wrapper carries the captured top-level discriminator (the
FQN of the schema passed to the inherent
DocumentShapeSerializer::write_struct entry point), if any.
Settings are not attached — serialize-side documents have no
protocol context.
Returns an error if no value has been written yet, if any frame is still open (caller forgot a closing callback), or if the serializer was driven into a malformed state.
Sourcepub fn write_struct(
&mut self,
schema: &Schema<'_>,
value: &dyn SerializableStruct,
) -> Result<(), SerdeError>
pub fn write_struct( &mut self, schema: &Schema<'_>, value: &dyn SerializableStruct, ) -> Result<(), SerdeError>
Inherent struct write that captures the schema’s shape ID as the serializer’s top-level discriminator.
Method resolution prefers this inherent method over the
ShapeSerializer::write_struct trait method when the receiver
is a concrete &mut DocumentShapeSerializer — so call sites
like
let mut ser = DocumentShapeSerializer::new();
ser.write_struct(&MY_SCHEMA, &my_value)?;hit this method. Indirect calls through &mut dyn ShapeSerializer
(e.g., from inside another struct’s serialize_members callback)
take the trait method instead, which doesn’t capture a
discriminator — nested struct discriminators are deliberately
not preserved (see the type-level docs).
Trait Implementations§
Source§impl Debug for DocumentShapeSerializer
impl Debug for DocumentShapeSerializer
Source§impl Default for DocumentShapeSerializer
impl Default for DocumentShapeSerializer
Source§fn default() -> DocumentShapeSerializer
fn default() -> DocumentShapeSerializer
Source§impl ShapeSerializer for DocumentShapeSerializer
impl ShapeSerializer for DocumentShapeSerializer
Source§fn write_struct(
&mut self,
schema: &Schema<'_>,
value: &dyn SerializableStruct,
) -> Result<(), SerdeError>
fn write_struct( &mut self, schema: &Schema<'_>, value: &dyn SerializableStruct, ) -> Result<(), SerdeError>
Source§fn write_list(
&mut self,
schema: &Schema<'_>,
write_elements: &dyn Fn(&mut dyn ShapeSerializer) -> Result<(), SerdeError>,
) -> Result<(), SerdeError>
fn write_list( &mut self, schema: &Schema<'_>, write_elements: &dyn Fn(&mut dyn ShapeSerializer) -> Result<(), SerdeError>, ) -> Result<(), SerdeError>
Source§fn write_map(
&mut self,
schema: &Schema<'_>,
write_entries: &dyn Fn(&mut dyn ShapeSerializer) -> Result<(), SerdeError>,
) -> Result<(), SerdeError>
fn write_map( &mut self, schema: &Schema<'_>, write_entries: &dyn Fn(&mut dyn ShapeSerializer) -> Result<(), SerdeError>, ) -> Result<(), SerdeError>
Source§fn write_boolean(
&mut self,
schema: &Schema<'_>,
value: bool,
) -> Result<(), SerdeError>
fn write_boolean( &mut self, schema: &Schema<'_>, value: bool, ) -> Result<(), SerdeError>
Source§fn write_byte(
&mut self,
schema: &Schema<'_>,
value: i8,
) -> Result<(), SerdeError>
fn write_byte( &mut self, schema: &Schema<'_>, value: i8, ) -> Result<(), SerdeError>
Source§fn write_short(
&mut self,
schema: &Schema<'_>,
value: i16,
) -> Result<(), SerdeError>
fn write_short( &mut self, schema: &Schema<'_>, value: i16, ) -> Result<(), SerdeError>
Source§fn write_integer(
&mut self,
schema: &Schema<'_>,
value: i32,
) -> Result<(), SerdeError>
fn write_integer( &mut self, schema: &Schema<'_>, value: i32, ) -> Result<(), SerdeError>
Source§fn write_long(
&mut self,
schema: &Schema<'_>,
value: i64,
) -> Result<(), SerdeError>
fn write_long( &mut self, schema: &Schema<'_>, value: i64, ) -> Result<(), SerdeError>
Source§fn write_float(
&mut self,
schema: &Schema<'_>,
value: f32,
) -> Result<(), SerdeError>
fn write_float( &mut self, schema: &Schema<'_>, value: f32, ) -> Result<(), SerdeError>
Source§fn write_double(
&mut self,
schema: &Schema<'_>,
value: f64,
) -> Result<(), SerdeError>
fn write_double( &mut self, schema: &Schema<'_>, value: f64, ) -> Result<(), SerdeError>
Source§fn write_big_integer(
&mut self,
schema: &Schema<'_>,
value: &BigInteger,
) -> Result<(), SerdeError>
fn write_big_integer( &mut self, schema: &Schema<'_>, value: &BigInteger, ) -> Result<(), SerdeError>
Source§fn write_big_decimal(
&mut self,
schema: &Schema<'_>,
value: &BigDecimal,
) -> Result<(), SerdeError>
fn write_big_decimal( &mut self, schema: &Schema<'_>, value: &BigDecimal, ) -> Result<(), SerdeError>
Source§fn write_string(
&mut self,
schema: &Schema<'_>,
value: &str,
) -> Result<(), SerdeError>
fn write_string( &mut self, schema: &Schema<'_>, value: &str, ) -> Result<(), SerdeError>
Source§fn write_blob(
&mut self,
schema: &Schema<'_>,
value: Blob,
) -> Result<(), SerdeError>
fn write_blob( &mut self, schema: &Schema<'_>, value: Blob, ) -> Result<(), SerdeError>
Source§fn write_timestamp(
&mut self,
schema: &Schema<'_>,
value: &DateTime,
) -> Result<(), SerdeError>
fn write_timestamp( &mut self, schema: &Schema<'_>, value: &DateTime, ) -> Result<(), SerdeError>
Source§fn write_document(
&mut self,
schema: &Schema<'_>,
value: &Document,
) -> Result<(), SerdeError>
fn write_document( &mut self, schema: &Schema<'_>, value: &Document, ) -> Result<(), SerdeError>
Source§fn write_null(&mut self, schema: &Schema<'_>) -> Result<(), SerdeError>
fn write_null(&mut self, schema: &Schema<'_>) -> Result<(), SerdeError>
Source§fn write_list_with_length(
&mut self,
schema: &Schema<'_>,
length: usize,
write_elements: &dyn Fn(&mut dyn ShapeSerializer) -> Result<(), SerdeError>,
) -> Result<(), SerdeError>
fn write_list_with_length( &mut self, schema: &Schema<'_>, length: usize, write_elements: &dyn Fn(&mut dyn ShapeSerializer) -> Result<(), SerdeError>, ) -> Result<(), SerdeError>
Source§fn write_map_with_length(
&mut self,
schema: &Schema<'_>,
length: usize,
write_entries: &dyn Fn(&mut dyn ShapeSerializer) -> Result<(), SerdeError>,
) -> Result<(), SerdeError>
fn write_map_with_length( &mut self, schema: &Schema<'_>, length: usize, write_entries: &dyn Fn(&mut dyn ShapeSerializer) -> Result<(), SerdeError>, ) -> Result<(), SerdeError>
Source§fn write_string_list(
&mut self,
schema: &Schema<'_>,
values: &[String],
) -> Result<(), SerdeError>
fn write_string_list( &mut self, schema: &Schema<'_>, values: &[String], ) -> Result<(), SerdeError>
Source§fn write_blob_list(
&mut self,
schema: &Schema<'_>,
values: &[Blob],
) -> Result<(), SerdeError>
fn write_blob_list( &mut self, schema: &Schema<'_>, values: &[Blob], ) -> Result<(), SerdeError>
Source§fn write_integer_list(
&mut self,
schema: &Schema<'_>,
values: &[i32],
) -> Result<(), SerdeError>
fn write_integer_list( &mut self, schema: &Schema<'_>, values: &[i32], ) -> Result<(), SerdeError>
Source§fn write_long_list(
&mut self,
schema: &Schema<'_>,
values: &[i64],
) -> Result<(), SerdeError>
fn write_long_list( &mut self, schema: &Schema<'_>, values: &[i64], ) -> Result<(), SerdeError>
Source§fn write_string_string_map(
&mut self,
schema: &Schema<'_>,
values: &HashMap<String, String>,
) -> Result<(), SerdeError>
fn write_string_string_map( &mut self, schema: &Schema<'_>, values: &HashMap<String, String>, ) -> Result<(), SerdeError>
Auto Trait Implementations§
impl Freeze for DocumentShapeSerializer
impl RefUnwindSafe for DocumentShapeSerializer
impl Send for DocumentShapeSerializer
impl Sync for DocumentShapeSerializer
impl Unpin for DocumentShapeSerializer
impl UnsafeUnpin for DocumentShapeSerializer
impl UnwindSafe for DocumentShapeSerializer
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more