aboutsummaryrefslogtreecommitdiff
path: root/src/message.rs
blob: bd5452305c0911f1a765637e82272d47470f588d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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 = ();
}