1 use std::fmt; 2 3 use crate::message_dyn::MessageDyn; 4 use crate::reflect::reflect_eq::ReflectEqMode; 5 use crate::reflect::MessageDescriptor; 6 use crate::reflect::ProtobufValue; 7 use crate::Message; 8 9 /// Trait implemented for all the generated messages, except when lite runtime is enabled. 10 /// 11 /// When lite runtime is enabled, only `MessageLite` is implemented. 12 /// 13 /// * Generated messages are generated from `.proto` files 14 /// * Dynamic messages can be created without code generation using only parsed proto files 15 /// (see [FileDescriptor::new_dynamic](crate::reflect::FileDescriptor::new_dynamic)). 16 /// 17 /// Also, generated messages implement `Default + PartialEq` 18 /// 19 /// This trait is sized, there's accompanying [`MessageDyn`](crate::MessageDyn) trait 20 /// which is implemented for all messages which can be used in functions 21 /// without making message a function type parameter. 22 /// 23 /// ## `Display` 24 /// 25 /// [`Display`](fmt::Display) implementation for messages does protobuf text format. 26 /// See [`text_format`](crate::text_format) for more details. 27 pub trait MessageFull: Message + ProtobufValue + fmt::Debug + fmt::Display { 28 /// Get message descriptor for message type. 29 /// 30 /// ``` 31 /// # use protobuf::MessageFull; 32 /// # fn foo<MyMessage: MessageFull>() { 33 /// let descriptor = MyMessage::descriptor(); 34 /// assert_eq!("MyMessage", descriptor.name()); 35 /// # } 36 /// ``` descriptor() -> MessageDescriptor37 fn descriptor() -> MessageDescriptor; 38 39 /// Reflective equality. 40 /// 41 /// # See also 42 /// 43 /// [`dyn Message::reflect_eq_dyn()`], `dyn` version of this function. reflect_eq(&self, other: &Self, mode: &ReflectEqMode) -> bool44 fn reflect_eq(&self, other: &Self, mode: &ReflectEqMode) -> bool { 45 <dyn MessageDyn>::reflect_eq_dyn(self, other, mode) 46 } 47 } 48