use std::fmt; use crate::message_dyn::MessageDyn; use crate::reflect::reflect_eq::ReflectEqMode; use crate::reflect::MessageDescriptor; use crate::reflect::ProtobufValue; use crate::Message; /// Trait implemented for all the generated messages, except when lite runtime is enabled. /// /// When lite runtime is enabled, only `MessageLite` is implemented. /// /// * Generated messages are generated from `.proto` files /// * Dynamic messages can be created without code generation using only parsed proto files /// (see [FileDescriptor::new_dynamic](crate::reflect::FileDescriptor::new_dynamic)). /// /// Also, generated messages implement `Default + PartialEq` /// /// This trait is sized, there's accompanying [`MessageDyn`](crate::MessageDyn) trait /// which is implemented for all messages which can be used in functions /// without making message a function type parameter. /// /// ## `Display` /// /// [`Display`](fmt::Display) implementation for messages does protobuf text format. /// See [`text_format`](crate::text_format) for more details. pub trait MessageFull: Message + ProtobufValue + fmt::Debug + fmt::Display { /// Get message descriptor for message type. /// /// ``` /// # use protobuf::MessageFull; /// # fn foo() { /// let descriptor = MyMessage::descriptor(); /// assert_eq!("MyMessage", descriptor.name()); /// # } /// ``` fn descriptor() -> MessageDescriptor; /// Reflective equality. /// /// # See also /// /// [`dyn Message::reflect_eq_dyn()`], `dyn` version of this function. fn reflect_eq(&self, other: &Self, mode: &ReflectEqMode) -> bool { ::reflect_eq_dyn(self, other, mode) } }