switchback_protocols/
mqtt.rs1use switchback_codec_pb::canardleteer::switchback::protocol::mqtt::v1alpha1::{
4 MqttChannelMeta, MqttContractMeta, MqttMessageMeta, MqttOperationMeta, MqttPayload,
5};
6use switchback_codec_pb::canardleteer::switchback::protocol::mqtt::v1alpha1::__buffa::oneof::mqtt_payload::Kind;
7use switchback_traits::ProtocolAttachment;
8
9use crate::traits::Protocol;
10use crate::wire::encode_message;
11
12#[derive(Clone, Copy, Debug, Default)]
14pub struct MqttProtocol;
15
16impl Protocol for MqttProtocol {
17 fn id(&self) -> &'static str {
18 "mqtt"
19 }
20}
21
22impl MqttProtocol {
23 pub fn attach_contract(&self, meta: &MqttContractMeta) -> ProtocolAttachment {
25 attachment_from_payload(MqttPayload {
26 kind: Some(Kind::Contract(Box::new(meta.clone()))),
27 ..Default::default()
28 })
29 }
30
31 pub fn attach_channel(&self, meta: &MqttChannelMeta) -> ProtocolAttachment {
33 attachment_from_payload(MqttPayload {
34 kind: Some(Kind::Channel(Box::new(meta.clone()))),
35 ..Default::default()
36 })
37 }
38
39 pub fn attach_operation(&self, meta: &MqttOperationMeta) -> ProtocolAttachment {
41 attachment_from_payload(MqttPayload {
42 kind: Some(Kind::Operation(Box::new(meta.clone()))),
43 ..Default::default()
44 })
45 }
46
47 pub fn attach_message(&self, meta: &MqttMessageMeta) -> ProtocolAttachment {
49 attachment_from_payload(MqttPayload {
50 kind: Some(Kind::Message(Box::new(meta.clone()))),
51 ..Default::default()
52 })
53 }
54}
55
56fn attachment_from_payload(payload: MqttPayload) -> ProtocolAttachment {
57 let protocol = MqttProtocol;
58 ProtocolAttachment {
59 protocol_id: protocol.id().to_string(),
60 payload: encode_message(&payload),
61 }
62}