"""
Json encoder class for all IoTA-JSON MQTT message encoders
"""
import json
from typing import Any, Dict, Tuple
from filip.clients.mqtt.encoder import BaseEncoder
from filip.models.mqtt import IoTAMQTTMessageType
[docs]class Json(BaseEncoder):
"""
Json encoder class for all IoTA-JSON MQTT message encoders
"""
prefix = "/json"
def __init__(self):
super().__init__()
[docs] def decode_message(self, msg, decoder="utf-8") -> Tuple[str, str, Dict]:
apikey, device_id, payload = super().decode_message(msg=msg, decoder=decoder)
payload = json.loads(payload)
return apikey, device_id, payload
[docs] def encode_msg(self, device_id, payload: Any, msg_type: IoTAMQTTMessageType) -> str:
if msg_type == IoTAMQTTMessageType.SINGLE:
return payload
elif msg_type == IoTAMQTTMessageType.MULTI:
payload = super()._parse_timestamp(payload=payload)
return json.dumps(payload, default=str)
elif msg_type == IoTAMQTTMessageType.CMDEXE:
return json.dumps(payload)
super()._raise_encoding_error(payload=payload, msg_type=msg_type)