1use crate::Metadata;
4
5#[derive(Clone, Debug, Eq, PartialEq)]
7pub struct Request<T> {
8 metadata: Metadata,
9 message: T,
10}
11
12impl<T> Request<T> {
13 #[must_use]
15 pub fn new(message: T) -> Self {
16 Self::from_parts(Metadata::new(), message)
17 }
18
19 #[must_use]
21 pub const fn from_parts(metadata: Metadata, message: T) -> Self {
22 Self { metadata, message }
23 }
24
25 #[must_use]
27 pub const fn metadata(&self) -> &Metadata {
28 &self.metadata
29 }
30
31 pub const fn metadata_mut(&mut self) -> &mut Metadata {
33 &mut self.metadata
34 }
35
36 #[must_use]
38 pub const fn get_ref(&self) -> &T {
39 &self.message
40 }
41
42 pub const fn get_mut(&mut self) -> &mut T {
44 &mut self.message
45 }
46
47 #[must_use]
49 pub fn into_parts(self) -> (Metadata, T) {
50 (self.metadata, self.message)
51 }
52
53 #[must_use]
55 pub fn map<U>(self, transform: impl FnOnce(T) -> U) -> Request<U> {
56 Request::from_parts(self.metadata, transform(self.message))
57 }
58}