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 {
init(flatBuffersObject: TelegramCore_PartialMediaReference) throws {
init?(flatBuffersObject: TelegramCore_PartialMediaReference) throws {
switch flatBuffersObject.valueType {
case .partialmediareferenceMessage:
guard let value = flatBuffersObject.value(type: TelegramCore_PartialMediaReference_Message.self) else {
@ -112,6 +112,8 @@ public extension PartialMediaReference {
}
func encodeToFlatBuffers(builder: inout FlatBufferBuilder) -> Offset {
let valueType: TelegramCore_PartialMediaReference_Value
let valueOffset: Offset
switch self {
case let .message(message):
let messageOffset = message.encodeToFlatBuffers(builder: &builder)
@ -119,28 +121,36 @@ public extension PartialMediaReference {
if let messageOffset {
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):
let webpageOffset = webPage.encodeToFlatBuffers(builder: &builder)
let start = TelegramCore_PartialMediaReference_WebPage.startPartialMediaReference_WebPage(&builder)
if let webpageOffset {
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):
let stickerPackOffset = stickerPack.encodeToFlatBuffers(builder: &builder)
let start = TelegramCore_PartialMediaReference_StickerPack.startPartialMediaReference_StickerPack(&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:
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:
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:
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)
TelegramCore_PeerReference_Group.add(id: id, &builder)
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):
let start = TelegramCore_PeerReference.startPeerReference(&builder)
TelegramCore_PeerReference_Channel.add(id: id, &builder)
TelegramCore_PeerReference_Channel.add(accessHash: accessHash, &builder)
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)!)
}
self.immediateThumbnailData = flatBuffersObject.immediateThumbnailData.isEmpty ? nil : Data(flatBuffersObject.immediateThumbnailData)
self.emojiMarkup = try flatBuffersObject.emojiMarkup.map { try EmojiMarkup(flatBuffersObject: $0) }
self.reference = try flatBuffersObject.reference.map { try TelegramMediaImageReference(flatBuffersObject: $0) }
self.partialReference = try flatBuffersObject.partialReference.map { try PartialMediaReference(flatBuffersObject: $0) }
self.emojiMarkup = try flatBuffersObject.emojiMarkup.flatMap { try EmojiMarkup(flatBuffersObject: $0) }
self.reference = try flatBuffersObject.reference.flatMap { try TelegramMediaImageReference(flatBuffersObject: $0) }
self.partialReference = try flatBuffersObject.partialReference.flatMap { try PartialMediaReference(flatBuffersObject: $0) }
self.flags = TelegramMediaImageFlags(rawValue: flatBuffersObject.flags)
}

View File

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