1use crate::Metadata;
4
5#[derive(Clone, Debug, Eq, PartialEq)]
10pub struct Response<T> {
11 metadata: Metadata,
12 message: T,
13}
14
15impl<T> Response<T> {
16 #[must_use]
18 pub fn new(message: T) -> Self {
19 Self::from_parts(Metadata::new(), message)
20 }
21
22 #[must_use]
24 pub const fn from_parts(metadata: Metadata, message: T) -> Self {
25 Self { metadata, message }
26 }
27
28 #[must_use]
30 pub const fn metadata(&self) -> &Metadata {
31 &self.metadata
32 }
33
34 pub const fn metadata_mut(&mut self) -> &mut Metadata {
36 &mut self.metadata
37 }
38
39 #[must_use]
41 pub const fn get_ref(&self) -> &T {
42 &self.message
43 }
44
45 pub const fn get_mut(&mut self) -> &mut T {
47 &mut self.message
48 }
49
50 #[must_use]
52 pub fn into_parts(self) -> (Metadata, T) {
53 (self.metadata, self.message)
54 }
55
56 #[must_use]
58 pub fn map<U>(self, transform: impl FnOnce(T) -> U) -> Response<U> {
59 Response::from_parts(self.metadata, transform(self.message))
60 }
61}