import Foundation public struct MessageSendReport: Equatable { public init( roundList: [Int]?, messageId: Data?, timestamp: Int? ) { self.roundList = roundList self.messageId = messageId self.timestamp = timestamp } public var roundList: [Int]? public var messageId: Data? public var timestamp: Int? } extension MessageSendReport: Codable { enum CodingKeys: String, CodingKey { case roundList = "Rounds" case messageId = "MessageID" case timestamp = "Timestamp" } public init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: CodingKeys.self) messageId = try container.decodeIfPresent(Data.self, forKey: .messageId) timestamp = try container.decodeIfPresent(Int.self, forKey: .timestamp) roundList = try container.decodeIfPresent([Int].self, forKey: .roundList) } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) try container.encode(messageId, forKey: .messageId) try container.encode(timestamp, forKey: .timestamp) try container.encode(roundList, forKey: .roundList) } }