pub struct Any {
pub type_url: String,
pub value: Vec<u8>,
}Expand description
Any contains an arbitrary serialized protocol buffer message along with a
URL that describes the type of the serialized message.
In its binary encoding, an Any is an ordinary message; but in other wire
forms like JSON, it has a special encoding. The format of the type URL is
described on the type_url field.
Protobuf APIs provide utilities to interact with Any values:
- A ‘pack’ operation accepts a message and constructs a generic
Anywrapper around it. - An ‘unpack’ operation reads the content of an
Anymessage, either into an existing message or a new one. Unpack operations must check the type of the value they unpack against the declaredtype_url. - An ‘is’ operation decides whether an
Anycontains a message of the given type, i.e. whether it can ‘unpack’ that type.
The JSON format representation of an Any follows one of these cases:
- For types without special-cased JSON encodings, the JSON format
representation of the
Anyis the same as that of the message, with an additional@typefield which contains the type URL. - For types with special-cased JSON encodings (typically called ‘well-known’
types, listed in https://protobuf.dev/programming-guides/json/#any), the
JSON format representation has a key
@typewhich contains the type URL and a keyvaluewhich contains the JSON-serialized value.
The text format representation of an Any is like a message with one field
whose name is the type URL in brackets. For example, an Any containing a
foo.Bar message may be written \[type.googleapis.com/foo.Bar\] { a: 2 }.
Fields§
§type_url: StringIdentifies the type of the serialized Protobuf message with a URI reference consisting of a prefix ending in a slash and the fully-qualified type name.
Example: type.googleapis.com/google.protobuf.StringValue
This string must contain at least one / character, and the content after
the last / must be the fully-qualified name of the type in canonical
form, without a leading dot. Do not write a scheme on these URI references
so that clients do not attempt to contact them.
The prefix is arbitrary and Protobuf implementations are expected to
simply strip off everything up to and including the last / to identify
the type. type.googleapis.com/ is a common default prefix that some
legacy implementations require. This prefix does not indicate the origin of
the type, and URIs containing it are not expected to respond to any
requests.
All type URL strings must be legal URI references with the additional
restriction (for the text format) that the content of the reference
must consist only of alphanumeric characters, percent-encoded escapes, and
characters in the following set (not including the outer backticks):
/-.~_!$&()*+,;=. Despite our allowing percent encodings, implementations
should not unescape them to prevent confusion with existing parsers. For
example, type.googleapis.com%2FFoo should be rejected.
In the original design of Any, the possibility of launching a type
resolution service at these type URLs was considered but Protobuf never
implemented one and considers contacting these URLs to be problematic and
a potential security issue. Do not attempt to contact type URLs.
value: Vec<u8>Holds a Protobuf serialization of the type described by type_url.
Trait Implementations§
impl Eq for Any
Source§impl Message for Any
impl Message for Any
Source§fn encoded_len(&self) -> usize
fn encoded_len(&self) -> usize
Source§fn encode(&self, buf: &mut impl BufMut) -> Result<(), EncodeError>where
Self: Sized,
fn encode(&self, buf: &mut impl BufMut) -> Result<(), EncodeError>where
Self: Sized,
Source§fn encode_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
fn encode_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
Source§fn encode_length_delimited(
&self,
buf: &mut impl BufMut,
) -> Result<(), EncodeError>where
Self: Sized,
fn encode_length_delimited(
&self,
buf: &mut impl BufMut,
) -> Result<(), EncodeError>where
Self: Sized,
Source§fn encode_length_delimited_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
fn encode_length_delimited_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
Source§fn decode(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
fn decode(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
Source§fn decode_length_delimited(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
fn decode_length_delimited(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
Source§fn merge(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
fn merge(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
self. Read moreSource§fn merge_length_delimited(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
fn merge_length_delimited(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
self.Source§impl Name for Any
impl Name for Any
Source§const NAME: &'static str = "Any"
const NAME: &'static str = "Any"
Message.
This name is the same as it appears in the source .proto file, e.g. FooBar.Source§const PACKAGE: &'static str = "google.protobuf"
const PACKAGE: &'static str = "google.protobuf"
., e.g. google.protobuf.Source§fn full_name() -> String
fn full_name() -> String
Message.
It’s prefixed with the package name and names of any parent messages,
e.g. google.rpc.BadRequest.FieldViolation.
By default, this is the package name followed by the message name.
Fully-qualified names must be unique within a domain of Type URLs.impl StructuralPartialEq for Any
Auto Trait Implementations§
impl Freeze for Any
impl RefUnwindSafe for Any
impl Send for Any
impl Sync for Any
impl Unpin for Any
impl UnsafeUnpin for Any
impl UnwindSafe for Any
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request