envoy_types/util.rs
1use prost::{Message, Name};
2
3use crate::pb::google::protobuf::Any;
4
5/// Packs a protobuf message into a [`google.protobuf.Any`]
6///
7/// # Examples
8///
9/// ```
10/// use prost::{Message, Name};
11/// use envoy_types::pb::google::protobuf::Any;
12/// use envoy_types::pb::envoy::extensions::transport_sockets::tls::v3::UpstreamTlsContext;
13/// use envoy_types::util::pack_any;
14///
15/// let tls_context = UpstreamTlsContext {
16/// sni: "www.envoyproxy.io".to_string(),
17/// ..Default::default()
18/// };
19///
20/// let packed = pack_any(tls_context.clone());
21///
22/// assert_eq!(packed, Any {
23/// type_url: "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext".to_string(),
24/// value: tls_context.encode_to_vec(),
25/// });
26/// ```
27///
28pub fn pack_any<T: Name + Message>(value: T) -> Any {
29 Any {
30 type_url: T::type_url(),
31 value: value.encode_to_vec(),
32 }
33}