session-ios/SessionMessagingKit/Pipelines/ReceivingPipeline.swift

41 lines
1.4 KiB
Swift

import SessionUtilities
public enum ReceivingPipeline {
public enum Error : LocalizedError {
case invalidMessage
public var errorDescription: String? {
switch self {
case .invalidMessage: return "Invalid message."
}
}
}
public static func parse(_ ciphertext: Data) -> Message? {
let plaintext = ciphertext // TODO: Decryption
let proto: SNProtoContent
do {
proto = try SNProtoContent.parseData(plaintext)
} catch {
SNLog("Couldn't parse proto due to error: \(error).")
return nil
}
let message: Message? = {
if let readReceipt = ReadReceipt.fromProto(proto) { return readReceipt }
if let sessionRequest = SessionRequest.fromProto(proto) { return sessionRequest }
if let typingIndicator = TypingIndicator.fromProto(proto) { return typingIndicator }
if let closedGroupUpdate = ClosedGroupUpdate.fromProto(proto) { return closedGroupUpdate }
if let expirationTimerUpdate = ExpirationTimerUpdate.fromProto(proto) { return expirationTimerUpdate }
if let visibleMessage = VisibleMessage.fromProto(proto) { return visibleMessage }
return nil
}()
if let message = message {
guard message.isValid else { return nil }
return message
} else {
return nil
}
}
}