use serde::{Deserialize, Serialize}; pub type MessageKind = u32; /// This trait should be implemented by all messages your application /// wants to handle (click to read more). /// /// It defines a `KIND`, which should be a **unique** /// `u32` that distinguishes these messages from other types of messages /// (it is used by our communication protocol), as well as an associated /// `Response` type that defines the type of the response that is given /// to the message. It is your responsibility to ensure that `KIND` is a /// unique `u32` that is not used by any other protocol messages. /// All `KIND` values of the form `0x42xxxxxx` are reserved by the netapp /// crate for internal purposes. /// /// A handler for this message has type `Self -> Self::Response`. /// If you need to return an error, the `Response` type should be /// a `Result<_, _>`. pub trait Message: Serialize + for<'de> Deserialize<'de> + Send + Sync { const KIND: MessageKind; type Response: Serialize + for<'de> Deserialize<'de> + Send + Sync; } #[derive(Serialize, Deserialize)] pub(crate) struct HelloMessage { pub server_port: u16, } impl Message for HelloMessage { const KIND: MessageKind = 0x42000001; type Response = (); }