Skip to main content

notifica_rust_sdk/payload/
push.rs

1/// Push notification channel payload — a list of device tokens.
2///
3/// # Example
4/// ```rust
5/// use notifica_crate::payload::push::PushPayload;
6///
7/// let payload = PushPayload::new(vec!["token-a".into(), "token-b".into()]);
8/// ```
9#[derive(Debug, Clone)]
10pub struct PushPayload(pub Vec<String>);
11
12impl PushPayload {
13    /// Create a push payload from a list of device tokens.
14    pub fn new(tokens: Vec<String>) -> Self {
15        Self(tokens)
16    }
17
18    /// Add a single device token.
19    pub fn token(mut self, token: impl Into<String>) -> Self {
20        self.0.push(token.into());
21        self
22    }
23}
24
25impl From<Vec<String>> for PushPayload {
26    fn from(tokens: Vec<String>) -> Self {
27        Self(tokens)
28    }
29}
30
31impl From<PushPayload> for Vec<String> {
32    fn from(p: PushPayload) -> Self {
33        p.0
34    }
35}
36
37#[cfg(test)]
38mod tests {
39    use super::*;
40
41    #[test]
42    fn from_vec_roundtrips() {
43        let tokens = vec!["a".into(), "b".into()];
44        let payload = PushPayload::from(tokens.clone());
45        let out: Vec<String> = payload.into();
46        assert_eq!(out, tokens);
47    }
48
49    #[test]
50    fn token_builder_appends() {
51        let p = PushPayload::new(vec![]).token("x").token("y");
52        assert_eq!(p.0, vec!["x", "y"]);
53    }
54}