ipfs_api_prelude/request/
pubsub.rs

1// Copyright 2017 rust-ipfs-api Developers
2//
3// Licensed under the Apache License, Version 2.0, <LICENSE-APACHE or
4// http://apache.org/licenses/LICENSE-2.0> or the MIT license <LICENSE-MIT or
5// http://opensource.org/licenses/MIT>, at your option. This file may not be
6// copied, modified, or distributed except according to those terms.
7//
8
9use crate::request::ApiRequest;
10use crate::serde::ser::SerializeStruct;
11use multibase::{encode, Base};
12use serde::{Serialize, Serializer};
13
14pub struct PubsubLs;
15
16impl_skip_serialize!(PubsubLs);
17
18impl ApiRequest for PubsubLs {
19    const PATH: &'static str = "/pubsub/ls";
20}
21
22pub struct PubsubPeers<'a> {
23    pub topic: Option<&'a [u8]>,
24}
25
26impl<'a> Serialize for PubsubPeers<'a> {
27    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
28    where
29        S: Serializer,
30    {
31        let mut state = serializer.serialize_struct("PubsubPeers", 1)?;
32
33        if let Some(topic) = self.topic {
34            let topic = encode(Base::Base64Url, topic);
35
36            state.serialize_field("arg", &topic)?;
37        } else {
38            state.serialize_field("arg", &Option::<String>::None)?;
39        }
40
41        state.end()
42    }
43}
44
45impl<'a> ApiRequest for PubsubPeers<'a> {
46    const PATH: &'static str = "/pubsub/peers";
47}
48
49pub struct PubsubPub<'a> {
50    pub topic: &'a [u8],
51}
52
53impl<'a> Serialize for PubsubPub<'a> {
54    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
55    where
56        S: Serializer,
57    {
58        let mut state = serializer.serialize_struct("PubsubPub", 1)?;
59
60        let topic = encode(Base::Base64Url, self.topic);
61
62        state.serialize_field("arg", &topic)?;
63
64        state.end()
65    }
66}
67
68impl<'a> ApiRequest for PubsubPub<'a> {
69    const PATH: &'static str = "/pubsub/pub";
70}
71
72pub struct PubsubSub<'a> {
73    pub topic: &'a [u8],
74}
75
76impl<'a> Serialize for PubsubSub<'a> {
77    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
78    where
79        S: Serializer,
80    {
81        let mut state = serializer.serialize_struct("PubsubSub", 1)?;
82
83        let topic = encode(Base::Base64Url, self.topic);
84
85        state.serialize_field("arg", &topic)?;
86
87        state.end()
88    }
89}
90
91impl<'a> ApiRequest for PubsubSub<'a> {
92    const PATH: &'static str = "/pubsub/sub";
93}