wireman_core/descriptor/
response.rs

1use std::ops::{Deref, DerefMut};
2
3use super::DynamicMessage;
4use prost_reflect::{MessageDescriptor, MethodDescriptor};
5
6/// Holds all the necessary data for a `gRPC` response.
7#[derive(Debug, Clone)]
8pub struct ResponseMessage {
9    pub message: DynamicMessage,
10    method_desc: MethodDescriptor,
11}
12
13impl ResponseMessage {
14    /// Create a new `ResponseMessage` with the provided message descriptor and method descriptor.
15    #[must_use]
16    pub fn new(message_desc: MessageDescriptor, method_desc: MethodDescriptor) -> Self {
17        let message = DynamicMessage::new(message_desc);
18        Self {
19            message,
20            method_desc,
21        }
22    }
23
24    // Set a new message for the response.
25    pub fn set_message(&mut self, message: DynamicMessage) {
26        self.message = message;
27    }
28}
29
30/// Streaming requests and responses.
31pub struct StreamingResponse {
32    pub inner: tonic::Streaming<ResponseMessage>,
33}
34
35impl StreamingResponse {
36    pub fn new(inner: tonic::Streaming<ResponseMessage>) -> Self {
37        Self { inner }
38    }
39}
40
41impl Deref for StreamingResponse {
42    type Target = tonic::Streaming<ResponseMessage>;
43
44    fn deref(&self) -> &Self::Target {
45        &self.inner
46    }
47}
48
49impl DerefMut for StreamingResponse {
50    fn deref_mut(&mut self) -> &mut Self::Target {
51        &mut self.inner
52    }
53}