Fix flatbuffers serialization

This commit is contained in:
Isaac 2025-03-25 12:36:31 +01:00
parent a4b39e6fd0
commit 2739a839ed
4 changed files with 24 additions and 14 deletions

View File

@ -75,7 +75,7 @@ public extension WebpageReference {
} }
public extension PartialMediaReference { public extension PartialMediaReference {
init(flatBuffersObject: TelegramCore_PartialMediaReference) throws { init?(flatBuffersObject: TelegramCore_PartialMediaReference) throws {
switch flatBuffersObject.valueType { switch flatBuffersObject.valueType {
case .partialmediareferenceMessage: case .partialmediareferenceMessage:
guard let value = flatBuffersObject.value(type: TelegramCore_PartialMediaReference_Message.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_PartialMediaReference_Message.self) else {
@ -112,6 +112,8 @@ public extension PartialMediaReference {
} }
func encodeToFlatBuffers(builder: inout FlatBufferBuilder) -> Offset { func encodeToFlatBuffers(builder: inout FlatBufferBuilder) -> Offset {
let valueType: TelegramCore_PartialMediaReference_Value
let valueOffset: Offset
switch self { switch self {
case let .message(message): case let .message(message):
let messageOffset = message.encodeToFlatBuffers(builder: &builder) let messageOffset = message.encodeToFlatBuffers(builder: &builder)
@ -119,28 +121,36 @@ public extension PartialMediaReference {
if let messageOffset { if let messageOffset {
TelegramCore_PartialMediaReference_Message.add(message: messageOffset, &builder) TelegramCore_PartialMediaReference_Message.add(message: messageOffset, &builder)
} }
return TelegramCore_PartialMediaReference_Message.endPartialMediaReference_Message(&builder, start: start) valueType = .partialmediareferenceMessage
valueOffset = TelegramCore_PartialMediaReference_Message.endPartialMediaReference_Message(&builder, start: start)
case let .webPage(webPage): case let .webPage(webPage):
let webpageOffset = webPage.encodeToFlatBuffers(builder: &builder) let webpageOffset = webPage.encodeToFlatBuffers(builder: &builder)
let start = TelegramCore_PartialMediaReference_WebPage.startPartialMediaReference_WebPage(&builder) let start = TelegramCore_PartialMediaReference_WebPage.startPartialMediaReference_WebPage(&builder)
if let webpageOffset { if let webpageOffset {
TelegramCore_PartialMediaReference_WebPage.add(webPage: webpageOffset, &builder) TelegramCore_PartialMediaReference_WebPage.add(webPage: webpageOffset, &builder)
} }
return TelegramCore_PartialMediaReference_WebPage.endPartialMediaReference_WebPage(&builder, start: start) valueType = .partialmediareferenceWebpage
valueOffset = TelegramCore_PartialMediaReference_WebPage.endPartialMediaReference_WebPage(&builder, start: start)
case let .stickerPack(stickerPack): case let .stickerPack(stickerPack):
let stickerPackOffset = stickerPack.encodeToFlatBuffers(builder: &builder) let stickerPackOffset = stickerPack.encodeToFlatBuffers(builder: &builder)
let start = TelegramCore_PartialMediaReference_StickerPack.startPartialMediaReference_StickerPack(&builder) let start = TelegramCore_PartialMediaReference_StickerPack.startPartialMediaReference_StickerPack(&builder)
TelegramCore_PartialMediaReference_StickerPack.add(stickerPack: stickerPackOffset, &builder) TelegramCore_PartialMediaReference_StickerPack.add(stickerPack: stickerPackOffset, &builder)
return TelegramCore_PartialMediaReference_StickerPack.endPartialMediaReference_StickerPack(&builder, start: start) valueType = .partialmediareferenceStickerpack
valueOffset = TelegramCore_PartialMediaReference_StickerPack.endPartialMediaReference_StickerPack(&builder, start: start)
case .savedGif: case .savedGif:
let start = TelegramCore_PartialMediaReference_SavedGif.startPartialMediaReference_SavedGif(&builder) let start = TelegramCore_PartialMediaReference_SavedGif.startPartialMediaReference_SavedGif(&builder)
return TelegramCore_PartialMediaReference_SavedGif.endPartialMediaReference_SavedGif(&builder, start: start) valueType = .partialmediareferenceSavedgif
valueOffset = TelegramCore_PartialMediaReference_SavedGif.endPartialMediaReference_SavedGif(&builder, start: start)
case .savedSticker: case .savedSticker:
let start = TelegramCore_PartialMediaReference_SavedSticker.startPartialMediaReference_SavedSticker(&builder) let start = TelegramCore_PartialMediaReference_SavedSticker.startPartialMediaReference_SavedSticker(&builder)
return TelegramCore_PartialMediaReference_SavedSticker.endPartialMediaReference_SavedSticker(&builder, start: start) valueType = .partialmediareferenceSavedsticker
valueOffset = TelegramCore_PartialMediaReference_SavedSticker.endPartialMediaReference_SavedSticker(&builder, start: start)
case .recentSticker: case .recentSticker:
let start = TelegramCore_PartialMediaReference_RecentSticker.startPartialMediaReference_RecentSticker(&builder) let start = TelegramCore_PartialMediaReference_RecentSticker.startPartialMediaReference_RecentSticker(&builder)
return TelegramCore_PartialMediaReference_RecentSticker.endPartialMediaReference_RecentSticker(&builder, start: start) valueType = .partialmediareferenceRecentsticker
} valueOffset = TelegramCore_PartialMediaReference_RecentSticker.endPartialMediaReference_RecentSticker(&builder, start: start)
}
return TelegramCore_PartialMediaReference.createPartialMediaReference(&builder, valueType: valueType, valueOffset: valueOffset)
} }
} }

View File

@ -110,13 +110,13 @@ public enum PeerReference: PostboxCoding, Hashable, Equatable {
let start = TelegramCore_PeerReference.startPeerReference(&builder) let start = TelegramCore_PeerReference.startPeerReference(&builder)
TelegramCore_PeerReference_Group.add(id: id, &builder) TelegramCore_PeerReference_Group.add(id: id, &builder)
let offset = TelegramCore_PeerReference_Group.endPeerReference_Group(&builder, start: start) let offset = TelegramCore_PeerReference_Group.endPeerReference_Group(&builder, start: start)
return TelegramCore_PeerReference.createPeerReference(&builder, valueType: .peerreferenceUser, valueOffset: offset) return TelegramCore_PeerReference.createPeerReference(&builder, valueType: .peerreferenceGroup, valueOffset: offset)
case let .channel(id, accessHash): case let .channel(id, accessHash):
let start = TelegramCore_PeerReference.startPeerReference(&builder) let start = TelegramCore_PeerReference.startPeerReference(&builder)
TelegramCore_PeerReference_Channel.add(id: id, &builder) TelegramCore_PeerReference_Channel.add(id: id, &builder)
TelegramCore_PeerReference_Channel.add(accessHash: accessHash, &builder) TelegramCore_PeerReference_Channel.add(accessHash: accessHash, &builder)
let offset = TelegramCore_PeerReference_Channel.endPeerReference_Channel(&builder, start: start) let offset = TelegramCore_PeerReference_Channel.endPeerReference_Channel(&builder, start: start)
return TelegramCore_PeerReference.createPeerReference(&builder, valueType: .peerreferenceUser, valueOffset: offset) return TelegramCore_PeerReference.createPeerReference(&builder, valueType: .peerreferenceChannel, valueOffset: offset)
} }
} }
} }

View File

@ -372,9 +372,9 @@ public final class TelegramMediaImage: Media, Equatable, Codable {
return try TelegramMediaImage.VideoRepresentation(flatBuffersObject: flatBuffersObject.videoRepresentations(at: i)!) return try TelegramMediaImage.VideoRepresentation(flatBuffersObject: flatBuffersObject.videoRepresentations(at: i)!)
} }
self.immediateThumbnailData = flatBuffersObject.immediateThumbnailData.isEmpty ? nil : Data(flatBuffersObject.immediateThumbnailData) self.immediateThumbnailData = flatBuffersObject.immediateThumbnailData.isEmpty ? nil : Data(flatBuffersObject.immediateThumbnailData)
self.emojiMarkup = try flatBuffersObject.emojiMarkup.map { try EmojiMarkup(flatBuffersObject: $0) } self.emojiMarkup = try flatBuffersObject.emojiMarkup.flatMap { try EmojiMarkup(flatBuffersObject: $0) }
self.reference = try flatBuffersObject.reference.map { try TelegramMediaImageReference(flatBuffersObject: $0) } self.reference = try flatBuffersObject.reference.flatMap { try TelegramMediaImageReference(flatBuffersObject: $0) }
self.partialReference = try flatBuffersObject.partialReference.map { try PartialMediaReference(flatBuffersObject: $0) } self.partialReference = try flatBuffersObject.partialReference.flatMap { try PartialMediaReference(flatBuffersObject: $0) }
self.flags = TelegramMediaImageFlags(rawValue: flatBuffersObject.flags) self.flags = TelegramMediaImageFlags(rawValue: flatBuffersObject.flags)
} }

View File

@ -16,9 +16,9 @@ public func FlatBuffers_getRoot<T: FlatBufferObject & Verifiable>(
options: VerifierOptions = .init() options: VerifierOptions = .init()
) -> T { ) -> T {
if flatBuffers_checkedGet { if flatBuffers_checkedGet {
return getRoot(byteBuffer: &byteBuffer)
} else {
return try! getCheckedRoot(byteBuffer: &byteBuffer, fileId: fileId, options: options) return try! getCheckedRoot(byteBuffer: &byteBuffer, fileId: fileId, options: options)
} else {
return getRoot(byteBuffer: &byteBuffer)
} }
} }