let ty = match ty {
Some(ty) => ty,
None => return Ok(None),
};
if !unknown_attrs.is_empty() {
bail!( "unknown attribute(s) for message field: #[prost({})]",
quote!(#(#unknown_attrs),*)
);
}
let tags = match tags {
Some(tags) => tags,
None => bail!("oneof field is missing a tags attribute"),
};
Ok(Some(Field { ty, tags }))
}
/// Returns a statement which encodes the oneof field. pubfn encode(&self, ident: TokenStream) -> TokenStream {
quote! { iflet Some(ref oneof) = #ident {
oneof.encode(buf)
}
}
}
/// Returns an expression which evaluates to the result of decoding the oneof field. pubfn merge(&self, ident: TokenStream) -> TokenStream { let ty = &self.ty;
quote! { #ty::merge(#ident, tag, wire_type, buf, ctx)
}
}
/// Returns an expression which evaluates to the encoded length of the oneof field. pubfn encoded_len(&self, ident: TokenStream) -> TokenStream { let ty = &self.ty;
quote! { #ident.as_ref().map_or(0, #ty::encoded_len)
}
}