summaryrefslogtreecommitdiff
path: root/vendor/prost/src/name.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/prost/src/name.rs')
-rw-r--r--vendor/prost/src/name.rs34
1 files changed, 34 insertions, 0 deletions
diff --git a/vendor/prost/src/name.rs b/vendor/prost/src/name.rs
new file mode 100644
index 00000000..1b5b4a28
--- /dev/null
+++ b/vendor/prost/src/name.rs
@@ -0,0 +1,34 @@
+//! Support for associating type name information with a [`Message`].
+
+use crate::Message;
+
+#[cfg(not(feature = "std"))]
+use alloc::{format, string::String};
+
+/// Associate a type name with a [`Message`] type.
+pub trait Name: Message {
+ /// Simple name for this [`Message`].
+ /// This name is the same as it appears in the source .proto file, e.g. `FooBar`.
+ const NAME: &'static str;
+
+ /// Package name this message type is contained in. They are domain-like
+ /// and delimited by `.`, e.g. `google.protobuf`.
+ const PACKAGE: &'static str;
+
+ /// Fully-qualified unique name for this [`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.
+ fn full_name() -> String {
+ format!("{}.{}", Self::PACKAGE, Self::NAME)
+ }
+
+ /// Type URL for this [`Message`], which by default is the full name with a
+ /// leading slash, but may also include a leading domain name, e.g.
+ /// `type.googleapis.com/google.profile.Person`.
+ /// This can be used when serializing into the `google.protobuf.Any` type.
+ fn type_url() -> String {
+ format!("/{}", Self::full_name())
+ }
+}