let ty = match ty {
Some(ty) => ty,
None => return Ok(None),
};
match unknown_attrs.len() { 0 => (), 1 => bail!( "unknown attribute for message field: {:?}",
unknown_attrs[0]
),
_ => bail!("unknown attributes for message field: {:?}", 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)
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.