Swiftgram/submodules/SyncCore/Sources/SecretChatIncomingEncryptedOperation.swift
2019-10-21 16:58:00 +04:00

68 lines
2.5 KiB
Swift

import Postbox
public enum SecretChatIncomingEncryptedOperationType: Int32 {
case message
case service
public init(_ value: Int32) {
if value == 0 {
self = .message
} else {
self = .service
}
}
public var value: Int32 {
switch self {
case .message:
return 0
case .service:
return 1
}
}
}
public final class SecretChatIncomingEncryptedOperation: PostboxCoding {
public let peerId: PeerId
public let globallyUniqueId: Int64
public let timestamp: Int32
public let type: SecretChatIncomingEncryptedOperationType
public let keyFingerprint: Int64
public let contents: MemoryBuffer
public let mediaFileReference: SecretChatFileReference?
public init(peerId: PeerId, globallyUniqueId: Int64, timestamp: Int32, type: SecretChatIncomingEncryptedOperationType, keyFingerprint: Int64, contents: MemoryBuffer, mediaFileReference: SecretChatFileReference?) {
self.peerId = peerId
self.globallyUniqueId = globallyUniqueId
self.timestamp = timestamp
self.type = type
self.keyFingerprint = keyFingerprint
self.contents = contents
self.mediaFileReference = mediaFileReference
}
public init(decoder: PostboxDecoder) {
self.peerId = PeerId(decoder.decodeInt64ForKey("p", orElse: 0))
self.globallyUniqueId = decoder.decodeInt64ForKey("u", orElse: 0)
self.timestamp = decoder.decodeInt32ForKey("t", orElse: 0)
self.type = SecretChatIncomingEncryptedOperationType(decoder.decodeInt32ForKey("k", orElse: 0))
self.keyFingerprint = decoder.decodeInt64ForKey("f", orElse: 0)
self.contents = decoder.decodeBytesForKey("c")!
self.mediaFileReference = decoder.decodeObjectForKey("m", decoder: { SecretChatFileReference(decoder: $0) }) as? SecretChatFileReference
}
public func encode(_ encoder: PostboxEncoder) {
encoder.encodeInt64(self.peerId.toInt64(), forKey: "p")
encoder.encodeInt64(self.globallyUniqueId, forKey: "u")
encoder.encodeInt32(self.timestamp, forKey: "t")
encoder.encodeInt32(self.type.value, forKey: "k")
encoder.encodeInt64(self.keyFingerprint, forKey: "f")
encoder.encodeBytes(self.contents, forKey: "c")
if let mediaFileReference = self.mediaFileReference {
encoder.encodeObject(mediaFileReference, forKey: "m")
} else {
encoder.encodeNil(forKey: "m")
}
}
}