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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
use super::{
    Shape,
    Message,
};
use crate::Error;

#[derive(Serialize, Deserialize, Debug)]
pub struct Mediated {
    pub next: String,
    #[serde(rename = "payloads~attach")]
    pub payload: Vec<u8>
}

impl Mediated {
    /// Constructor with empty payload
    /// # Parameters
    /// *next - `DidUrl` of delivery target.
    ///
    pub fn new(next: String) -> Self {
        Mediated{
            next,
            payload: vec!()
        }
    }
    /// Payload setter to be chained in forwarding calls.
    ///
    /// # Example
    /// ```rust
    /// use std::str::FromStr;
    /// use didcomm_rs::Mediated;
    /// let warpper_payload = Mediated::new("did:key:abc".into())
    ///     .with_payload(b"hello, abc".to_vec());
    /// ```
    ///
    pub fn with_payload(self, payload: Vec<u8>) -> Self {
        Mediated {
            payload,
            ..self
        }
    }
}

impl Shape for Mediated {
   type Err = Error;
   fn shape(m: &Message) -> Result<Self, Self::Err> {
       serde_json::from_slice(m.get_body()?.as_ref())
           .map_err(|e| Error::SerdeError(e))
   }
}