FlatBuffers implementation debugging

This commit is contained in:
Isaac 2025-03-19 18:56:39 +01:00
parent b732a6c578
commit 7e2c6da812
15 changed files with 139 additions and 107 deletions

View File

@ -101,6 +101,7 @@ private enum DebugControllerEntry: ItemListNodeEntry {
case compressedEmojiCache(Bool) case compressedEmojiCache(Bool)
case storiesJpegExperiment(Bool) case storiesJpegExperiment(Bool)
case conferenceDebug(Bool) case conferenceDebug(Bool)
case checkSerializedData(Bool)
case enableQuickReactionSwitch(Bool) case enableQuickReactionSwitch(Bool)
case disableReloginTokens(Bool) case disableReloginTokens(Bool)
case liveStreamV2(Bool) case liveStreamV2(Bool)
@ -133,7 +134,7 @@ private enum DebugControllerEntry: ItemListNodeEntry {
return DebugControllerSection.web.rawValue return DebugControllerSection.web.rawValue
case .keepChatNavigationStack, .skipReadHistory, .dustEffect, .crashOnSlowQueries, .crashOnMemoryPressure: case .keepChatNavigationStack, .skipReadHistory, .dustEffect, .crashOnSlowQueries, .crashOnMemoryPressure:
return DebugControllerSection.experiments.rawValue return DebugControllerSection.experiments.rawValue
case .clearTips, .resetNotifications, .crash, .fillLocalSavedMessageCache, .resetDatabase, .resetDatabaseAndCache, .resetHoles, .resetTagHoles, .reindexUnread, .resetCacheIndex, .reindexCache, .resetBiometricsData, .optimizeDatabase, .photoPreview, .knockoutWallpaper, .compressedEmojiCache, .storiesJpegExperiment, .conferenceDebug, .enableQuickReactionSwitch, .experimentalCompatibility, .enableDebugDataDisplay, .rippleEffect, .browserExperiment, .localTranscription, .enableReactionOverrides, .restorePurchases, .disableReloginTokens, .liveStreamV2, .experimentalCallMute, .playerV2, .devRequests, .fakeAds, .enableLocalTranslation: case .clearTips, .resetNotifications, .crash, .fillLocalSavedMessageCache, .resetDatabase, .resetDatabaseAndCache, .resetHoles, .resetTagHoles, .reindexUnread, .resetCacheIndex, .reindexCache, .resetBiometricsData, .optimizeDatabase, .photoPreview, .knockoutWallpaper, .compressedEmojiCache, .storiesJpegExperiment, .conferenceDebug, .checkSerializedData, .enableQuickReactionSwitch, .experimentalCompatibility, .enableDebugDataDisplay, .rippleEffect, .browserExperiment, .localTranscription, .enableReactionOverrides, .restorePurchases, .disableReloginTokens, .liveStreamV2, .experimentalCallMute, .playerV2, .devRequests, .fakeAds, .enableLocalTranslation:
return DebugControllerSection.experiments.rawValue return DebugControllerSection.experiments.rawValue
case .logTranslationRecognition, .resetTranslationStates: case .logTranslationRecognition, .resetTranslationStates:
return DebugControllerSection.translation.rawValue return DebugControllerSection.translation.rawValue
@ -244,12 +245,14 @@ private enum DebugControllerEntry: ItemListNodeEntry {
return 48 return 48
case .conferenceDebug: case .conferenceDebug:
return 49 return 49
case .enableQuickReactionSwitch: case .checkSerializedData:
return 50 return 50
case .liveStreamV2: case .enableQuickReactionSwitch:
return 51 return 51
case .experimentalCallMute: case .liveStreamV2:
return 52 return 52
case .experimentalCallMute:
return 53
case .playerV2: case .playerV2:
return 54 return 54
case .devRequests: case .devRequests:
@ -1318,6 +1321,16 @@ private enum DebugControllerEntry: ItemListNodeEntry {
}) })
}).start() }).start()
}) })
case let .checkSerializedData(value):
return ItemListSwitchItem(presentationData: presentationData, title: "Check Serialized Data", value: value, sectionId: self.section, style: .blocks, updated: { value in
let _ = arguments.sharedContext.accountManager.transaction ({ transaction in
transaction.updateSharedData(ApplicationSpecificSharedDataKeys.experimentalUISettings, { settings in
var settings = settings?.get(ExperimentalUISettings.self) ?? ExperimentalUISettings.defaultSettings
settings.checkSerializedData = value
return PreferencesEntry(settings)
})
}).start()
})
case let .enableQuickReactionSwitch(value): case let .enableQuickReactionSwitch(value):
return ItemListSwitchItem(presentationData: presentationData, title: "Enable Quick Reaction", value: value, sectionId: self.section, style: .blocks, updated: { value in return ItemListSwitchItem(presentationData: presentationData, title: "Enable Quick Reaction", value: value, sectionId: self.section, style: .blocks, updated: { value in
let _ = arguments.sharedContext.accountManager.transaction ({ transaction in let _ = arguments.sharedContext.accountManager.transaction ({ transaction in
@ -1540,6 +1553,7 @@ private func debugControllerEntries(sharedContext: SharedAccountContext, present
entries.append(.disableReloginTokens(experimentalSettings.disableReloginTokens)) entries.append(.disableReloginTokens(experimentalSettings.disableReloginTokens))
entries.append(.conferenceDebug(experimentalSettings.conferenceDebug)) entries.append(.conferenceDebug(experimentalSettings.conferenceDebug))
entries.append(.checkSerializedData(experimentalSettings.checkSerializedData))
entries.append(.enableQuickReactionSwitch(!experimentalSettings.disableQuickReaction)) entries.append(.enableQuickReactionSwitch(!experimentalSettings.disableQuickReaction))
entries.append(.liveStreamV2(experimentalSettings.liveStreamV2)) entries.append(.liveStreamV2(experimentalSettings.liveStreamV2))
entries.append(.experimentalCallMute(experimentalSettings.experimentalCallMute)) entries.append(.experimentalCallMute(experimentalSettings.experimentalCallMute))

View File

@ -337,13 +337,13 @@ public struct PeerEmojiStatus: Equatable, Codable {
switch flatBuffersObject.valueType { switch flatBuffersObject.valueType {
case .peeremojistatuscontentemoji: case .peeremojistatuscontentemoji:
guard let emoji = flatBuffersObject.value(type: TelegramCore_PeerEmojiStatusContentEmoji.self) else { guard let emoji = flatBuffersObject.value(type: TelegramCore_PeerEmojiStatusContentEmoji.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .emoji(fileId: emoji.fileId) self = .emoji(fileId: emoji.fileId)
case .peeremojistatuscontentstargift: case .peeremojistatuscontentstargift:
guard let starGift = flatBuffersObject.value(type: TelegramCore_PeerEmojiStatusContentStarGift.self) else { guard let starGift = flatBuffersObject.value(type: TelegramCore_PeerEmojiStatusContentStarGift.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .starGift( self = .starGift(
id: starGift.id, id: starGift.id,
@ -358,7 +358,7 @@ public struct PeerEmojiStatus: Equatable, Codable {
) )
case .none_: case .none_:
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
} }

View File

@ -970,7 +970,7 @@ public func TelegramMediaResource_parse(flatBuffersObject: TelegramCore_Telegram
switch flatBuffersObject.valueType { switch flatBuffersObject.valueType {
case .telegrammediaresourceCloudfilemediaresource: case .telegrammediaresourceCloudfilemediaresource:
guard let value = flatBuffersObject.value(type: TelegramCore_TelegramMediaResource_CloudFileMediaResource.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_TelegramMediaResource_CloudFileMediaResource.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
return CloudFileMediaResource( return CloudFileMediaResource(
datacenterId: Int(value.datacenterId), datacenterId: Int(value.datacenterId),
@ -982,7 +982,7 @@ public func TelegramMediaResource_parse(flatBuffersObject: TelegramCore_Telegram
) )
case .telegrammediaresourceClouddocumentsizemediaresource: case .telegrammediaresourceClouddocumentsizemediaresource:
guard let value = flatBuffersObject.value(type: TelegramCore_TelegramMediaResource_CloudDocumentSizeMediaResource.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_TelegramMediaResource_CloudDocumentSizeMediaResource.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
return CloudDocumentSizeMediaResource( return CloudDocumentSizeMediaResource(
datacenterId: value.datacenterId, datacenterId: value.datacenterId,
@ -993,7 +993,7 @@ public func TelegramMediaResource_parse(flatBuffersObject: TelegramCore_Telegram
) )
case .telegrammediaresourceCloudphotosizemediaresource: case .telegrammediaresourceCloudphotosizemediaresource:
guard let value = flatBuffersObject.value(type: TelegramCore_TelegramMediaResource_CloudPhotoSizeMediaResource.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_TelegramMediaResource_CloudPhotoSizeMediaResource.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
return CloudPhotoSizeMediaResource( return CloudPhotoSizeMediaResource(
datacenterId: value.datacenterId, datacenterId: value.datacenterId,
@ -1005,7 +1005,7 @@ public func TelegramMediaResource_parse(flatBuffersObject: TelegramCore_Telegram
) )
case .telegrammediaresourceCloudpeerphotosizemediaresource: case .telegrammediaresourceCloudpeerphotosizemediaresource:
guard let value = flatBuffersObject.value(type: TelegramCore_TelegramMediaResource_CloudPeerPhotoSizeMediaResource.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_TelegramMediaResource_CloudPeerPhotoSizeMediaResource.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
let sizeSpec: CloudPeerPhotoSizeSpec let sizeSpec: CloudPeerPhotoSizeSpec
switch value.sizeSpec { switch value.sizeSpec {
@ -1023,7 +1023,7 @@ public func TelegramMediaResource_parse(flatBuffersObject: TelegramCore_Telegram
) )
case .telegrammediaresourceCloudstickerpackthumbnailmediaresource: case .telegrammediaresourceCloudstickerpackthumbnailmediaresource:
guard let value = flatBuffersObject.value(type: TelegramCore_TelegramMediaResource_CloudStickerPackThumbnailMediaResource.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_TelegramMediaResource_CloudStickerPackThumbnailMediaResource.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
return CloudStickerPackThumbnailMediaResource( return CloudStickerPackThumbnailMediaResource(
datacenterId: value.datacenterId, datacenterId: value.datacenterId,
@ -1033,7 +1033,7 @@ public func TelegramMediaResource_parse(flatBuffersObject: TelegramCore_Telegram
) )
case .telegrammediaresourceClouddocumentmediaresource: case .telegrammediaresourceClouddocumentmediaresource:
guard let value = flatBuffersObject.value(type: TelegramCore_TelegramMediaResource_CloudDocumentMediaResource.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_TelegramMediaResource_CloudDocumentMediaResource.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
return CloudDocumentMediaResource( return CloudDocumentMediaResource(
datacenterId: Int(value.datacenterId), datacenterId: Int(value.datacenterId),
@ -1045,7 +1045,7 @@ public func TelegramMediaResource_parse(flatBuffersObject: TelegramCore_Telegram
) )
case .telegrammediaresourceLocalfilemediaresource: case .telegrammediaresourceLocalfilemediaresource:
guard let value = flatBuffersObject.value(type: TelegramCore_TelegramMediaResource_LocalFileMediaResource.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_TelegramMediaResource_LocalFileMediaResource.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
return LocalFileMediaResource( return LocalFileMediaResource(
fileId: value.fileId, fileId: value.fileId,
@ -1053,7 +1053,7 @@ public func TelegramMediaResource_parse(flatBuffersObject: TelegramCore_Telegram
isSecretRelated: value.isSecretRelated isSecretRelated: value.isSecretRelated
) )
case .none_: case .none_:
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
} }

View File

@ -522,139 +522,139 @@ public indirect enum InstantPageBlock: PostboxCoding, Equatable {
self = .unsupported self = .unsupported
case .instantpageblockTitle: case .instantpageblockTitle:
guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Title.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Title.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .title(try RichText(flatBuffersObject: value.text)) self = .title(try RichText(flatBuffersObject: value.text))
case .instantpageblockSubtitle: case .instantpageblockSubtitle:
guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Subtitle.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Subtitle.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .subtitle(try RichText(flatBuffersObject: value.text)) self = .subtitle(try RichText(flatBuffersObject: value.text))
case .instantpageblockAuthordate: case .instantpageblockAuthordate:
guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_AuthorDate.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_AuthorDate.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .authorDate(author: try RichText(flatBuffersObject: value.author), date: value.date) self = .authorDate(author: try RichText(flatBuffersObject: value.author), date: value.date)
case .instantpageblockHeader: case .instantpageblockHeader:
guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Header.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Header.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .header(try RichText(flatBuffersObject: value.text)) self = .header(try RichText(flatBuffersObject: value.text))
case .instantpageblockSubheader: case .instantpageblockSubheader:
guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Subheader.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Subheader.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .subheader(try RichText(flatBuffersObject: value.text)) self = .subheader(try RichText(flatBuffersObject: value.text))
case .instantpageblockParagraph: case .instantpageblockParagraph:
guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Paragraph.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Paragraph.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .paragraph(try RichText(flatBuffersObject: value.text)) self = .paragraph(try RichText(flatBuffersObject: value.text))
case .instantpageblockPreformatted: case .instantpageblockPreformatted:
guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Preformatted.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Preformatted.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .preformatted(try RichText(flatBuffersObject: value.text)) self = .preformatted(try RichText(flatBuffersObject: value.text))
case .instantpageblockFooter: case .instantpageblockFooter:
guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Footer.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Footer.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .footer(try RichText(flatBuffersObject: value.text)) self = .footer(try RichText(flatBuffersObject: value.text))
case .instantpageblockDivider: case .instantpageblockDivider:
self = .divider self = .divider
case .instantpageblockAnchor: case .instantpageblockAnchor:
guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Anchor.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Anchor.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .anchor(value.name) self = .anchor(value.name)
case .instantpageblockList: case .instantpageblockList:
guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_List.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_List.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .list(items: try (0 ..< value.itemsCount).map { try InstantPageListItem(flatBuffersObject: value.items(at: $0)!) }, ordered: value.ordered) self = .list(items: try (0 ..< value.itemsCount).map { try InstantPageListItem(flatBuffersObject: value.items(at: $0)!) }, ordered: value.ordered)
case .instantpageblockBlockquote: case .instantpageblockBlockquote:
guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_BlockQuote.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_BlockQuote.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .blockQuote(text: try RichText(flatBuffersObject: value.text), caption: try RichText(flatBuffersObject: value.caption)) self = .blockQuote(text: try RichText(flatBuffersObject: value.text), caption: try RichText(flatBuffersObject: value.caption))
case .instantpageblockPullquote: case .instantpageblockPullquote:
guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_PullQuote.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_PullQuote.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .pullQuote(text: try RichText(flatBuffersObject: value.text), caption: try RichText(flatBuffersObject: value.caption)) self = .pullQuote(text: try RichText(flatBuffersObject: value.text), caption: try RichText(flatBuffersObject: value.caption))
case .instantpageblockImage: case .instantpageblockImage:
guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Image.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Image.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .image(id: MediaId(value.id), caption: try InstantPageCaption(flatBuffersObject: value.caption), url: value.url, webpageId: value.webpageId.flatMap(MediaId.init)) self = .image(id: MediaId(value.id), caption: try InstantPageCaption(flatBuffersObject: value.caption), url: value.url, webpageId: value.webpageId.flatMap(MediaId.init))
case .instantpageblockVideo: case .instantpageblockVideo:
guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Video.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Video.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .video(id: MediaId(value.id), caption: try InstantPageCaption(flatBuffersObject: value.caption), autoplay: value.autoplay, loop: value.loop) self = .video(id: MediaId(value.id), caption: try InstantPageCaption(flatBuffersObject: value.caption), autoplay: value.autoplay, loop: value.loop)
case .instantpageblockAudio: case .instantpageblockAudio:
guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Audio.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Audio.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .audio(id: MediaId(value.id), caption: try InstantPageCaption(flatBuffersObject: value.caption)) self = .audio(id: MediaId(value.id), caption: try InstantPageCaption(flatBuffersObject: value.caption))
case .instantpageblockCover: case .instantpageblockCover:
guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Cover.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Cover.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .cover(try InstantPageBlock(flatBuffersObject: value.block)) self = .cover(try InstantPageBlock(flatBuffersObject: value.block))
case .instantpageblockWebembed: case .instantpageblockWebembed:
guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_WebEmbed.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_WebEmbed.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .webEmbed(url: value.url, html: value.html, dimensions: value.dimensions.flatMap(PixelDimensions.init), caption: try InstantPageCaption(flatBuffersObject: value.caption), stretchToWidth: value.stretchToWidth, allowScrolling: value.allowScrolling, coverId: value.coverId.flatMap(MediaId.init)) self = .webEmbed(url: value.url, html: value.html, dimensions: value.dimensions.flatMap(PixelDimensions.init), caption: try InstantPageCaption(flatBuffersObject: value.caption), stretchToWidth: value.stretchToWidth, allowScrolling: value.allowScrolling, coverId: value.coverId.flatMap(MediaId.init))
case .instantpageblockPostembed: case .instantpageblockPostembed:
guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_PostEmbed.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_PostEmbed.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .postEmbed(url: value.url, webpageId: value.webpageId.flatMap(MediaId.init), avatarId: value.avatarId.flatMap(MediaId.init), author: value.author, date: value.date, blocks: try (0 ..< value.blocksCount).map { try InstantPageBlock(flatBuffersObject: value.blocks(at: $0)!) }, caption: try InstantPageCaption(flatBuffersObject: value.caption)) self = .postEmbed(url: value.url, webpageId: value.webpageId.flatMap(MediaId.init), avatarId: value.avatarId.flatMap(MediaId.init), author: value.author, date: value.date, blocks: try (0 ..< value.blocksCount).map { try InstantPageBlock(flatBuffersObject: value.blocks(at: $0)!) }, caption: try InstantPageCaption(flatBuffersObject: value.caption))
case .instantpageblockCollage: case .instantpageblockCollage:
guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Collage.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Collage.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .collage(items: try (0 ..< value.itemsCount).map { try InstantPageBlock(flatBuffersObject: value.items(at: $0)!) }, caption: try InstantPageCaption(flatBuffersObject: value.caption)) self = .collage(items: try (0 ..< value.itemsCount).map { try InstantPageBlock(flatBuffersObject: value.items(at: $0)!) }, caption: try InstantPageCaption(flatBuffersObject: value.caption))
case .instantpageblockSlideshow: case .instantpageblockSlideshow:
guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Slideshow.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Slideshow.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .slideshow(items: try (0 ..< value.itemsCount).map { try InstantPageBlock(flatBuffersObject: value.items(at: $0)!) }, caption: try InstantPageCaption(flatBuffersObject: value.caption)) self = .slideshow(items: try (0 ..< value.itemsCount).map { try InstantPageBlock(flatBuffersObject: value.items(at: $0)!) }, caption: try InstantPageCaption(flatBuffersObject: value.caption))
case .instantpageblockChannelbanner: case .instantpageblockChannelbanner:
guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_ChannelBanner.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_ChannelBanner.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
let channel = try value.channel.flatMap { try TelegramChannel(flatBuffersObject: $0) } let channel = try value.channel.flatMap { try TelegramChannel(flatBuffersObject: $0) }
self = .channelBanner(channel) self = .channelBanner(channel)
case .instantpageblockKicker: case .instantpageblockKicker:
guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Kicker.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Kicker.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .kicker(try RichText(flatBuffersObject: value.text)) self = .kicker(try RichText(flatBuffersObject: value.text))
case .instantpageblockTable: case .instantpageblockTable:
guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Table.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Table.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .table(title: try RichText(flatBuffersObject: value.title), rows: try (0 ..< value.rowsCount).map { try InstantPageTableRow(flatBuffersObject: value.rows(at: $0)!) }, bordered: value.bordered, striped: value.striped) self = .table(title: try RichText(flatBuffersObject: value.title), rows: try (0 ..< value.rowsCount).map { try InstantPageTableRow(flatBuffersObject: value.rows(at: $0)!) }, bordered: value.bordered, striped: value.striped)
case .instantpageblockDetails: case .instantpageblockDetails:
guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Details.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Details.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .details(title: try RichText(flatBuffersObject: value.title), blocks: try (0 ..< value.blocksCount).map { try InstantPageBlock(flatBuffersObject: value.blocks(at: $0)!) }, expanded: value.expanded) self = .details(title: try RichText(flatBuffersObject: value.title), blocks: try (0 ..< value.blocksCount).map { try InstantPageBlock(flatBuffersObject: value.blocks(at: $0)!) }, expanded: value.expanded)
case .instantpageblockRelatedarticles: case .instantpageblockRelatedarticles:
guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_RelatedArticles.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_RelatedArticles.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .relatedArticles(title: try RichText(flatBuffersObject: value.title), articles: try (0 ..< value.articlesCount).map { try InstantPageRelatedArticle(flatBuffersObject: value.articles(at: $0)!) }) self = .relatedArticles(title: try RichText(flatBuffersObject: value.title), articles: try (0 ..< value.articlesCount).map { try InstantPageRelatedArticle(flatBuffersObject: value.articles(at: $0)!) })
case .instantpageblockMap: case .instantpageblockMap:
guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Map.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_InstantPageBlock_Map.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .map(latitude: value.latitude, longitude: value.longitude, zoom: value.zoom, dimensions: PixelDimensions(value.dimensions), caption: try InstantPageCaption(flatBuffersObject: value.caption)) self = .map(latitude: value.latitude, longitude: value.longitude, zoom: value.zoom, dimensions: PixelDimensions(value.dimensions), caption: try InstantPageCaption(flatBuffersObject: value.caption))
case .none_: case .none_:
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
} }
@ -1023,13 +1023,13 @@ public indirect enum InstantPageListItem: PostboxCoding, Equatable {
switch flatBuffersObject.valueType { switch flatBuffersObject.valueType {
case .instantpagelistitemText: case .instantpagelistitemText:
guard let textValue = flatBuffersObject.value(type: TelegramCore_InstantPageListItem_Text.self) else { guard let textValue = flatBuffersObject.value(type: TelegramCore_InstantPageListItem_Text.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .text(try RichText(flatBuffersObject: textValue.text), textValue.number) self = .text(try RichText(flatBuffersObject: textValue.text), textValue.number)
case .instantpagelistitemBlocks: case .instantpagelistitemBlocks:
guard let blocksValue = flatBuffersObject.value(type: TelegramCore_InstantPageListItem_Blocks.self) else { guard let blocksValue = flatBuffersObject.value(type: TelegramCore_InstantPageListItem_Blocks.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
let blocks = try (0 ..< blocksValue.blocksCount).map { i in let blocks = try (0 ..< blocksValue.blocksCount).map { i in
return try InstantPageBlock(flatBuffersObject: blocksValue.blocks(at: i)!) return try InstantPageBlock(flatBuffersObject: blocksValue.blocks(at: i)!)
@ -1038,7 +1038,7 @@ public indirect enum InstantPageListItem: PostboxCoding, Equatable {
case .instantpagelistitemUnknown: case .instantpagelistitemUnknown:
self = .unknown self = .unknown
case .none_: case .none_:
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
} }

View File

@ -79,7 +79,7 @@ public extension PartialMediaReference {
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 {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
if let message = value.message { if let message = value.message {
self = .message(message: try MessageReference(flatBuffersObject: message)) self = .message(message: try MessageReference(flatBuffersObject: message))
@ -88,7 +88,7 @@ public extension PartialMediaReference {
} }
case .partialmediareferenceWebpage: case .partialmediareferenceWebpage:
guard let value = flatBuffersObject.value(type: TelegramCore_PartialMediaReference_WebPage.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_PartialMediaReference_WebPage.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
if let webPage = value.webPage { if let webPage = value.webPage {
self = .webPage(webPage: try WebpageReference(flatBuffersObject: webPage)) self = .webPage(webPage: try WebpageReference(flatBuffersObject: webPage))
@ -97,7 +97,7 @@ public extension PartialMediaReference {
} }
case .partialmediareferenceStickerpack: case .partialmediareferenceStickerpack:
guard let value = flatBuffersObject.value(type: TelegramCore_PartialMediaReference_StickerPack.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_PartialMediaReference_StickerPack.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .stickerPack(stickerPack: try StickerPackReference(flatBuffersObject: value.stickerPack)) self = .stickerPack(stickerPack: try StickerPackReference(flatBuffersObject: value.stickerPack))
case .partialmediareferenceSavedgif: case .partialmediareferenceSavedgif:
@ -107,7 +107,7 @@ public extension PartialMediaReference {
case .partialmediareferenceRecentsticker: case .partialmediareferenceRecentsticker:
self = .recentSticker self = .recentSticker
case .none_: case .none_:
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
} }

View File

@ -19,16 +19,16 @@ public enum TelegramPeerAccessHash: Hashable {
switch flatBuffersObject.valueType { switch flatBuffersObject.valueType {
case .telegrampeeraccesshashPersonal: case .telegrampeeraccesshashPersonal:
guard let personal = flatBuffersObject.value(type: TelegramCore_TelegramPeerAccessHash_Personal.self) else { guard let personal = flatBuffersObject.value(type: TelegramCore_TelegramPeerAccessHash_Personal.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .personal(personal.accessHash) self = .personal(personal.accessHash)
case .telegrampeeraccesshashGenericpublic: case .telegrampeeraccesshashGenericpublic:
guard let genericPublic = flatBuffersObject.value(type: TelegramCore_TelegramPeerAccessHash_GenericPublic.self) else { guard let genericPublic = flatBuffersObject.value(type: TelegramCore_TelegramPeerAccessHash_GenericPublic.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .genericPublic(genericPublic.accessHash) self = .genericPublic(genericPublic.accessHash)
case .none_: case .none_:
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
} }

View File

@ -80,21 +80,21 @@ public enum PeerReference: PostboxCoding, Hashable, Equatable {
switch flatBuffersObject.valueType { switch flatBuffersObject.valueType {
case .peerreferenceUser: case .peerreferenceUser:
guard let value = flatBuffersObject.value(type: TelegramCore_PeerReference_User.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_PeerReference_User.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .user(id: value.id, accessHash: value.accessHash) self = .user(id: value.id, accessHash: value.accessHash)
case .peerreferenceGroup: case .peerreferenceGroup:
guard let value = flatBuffersObject.value(type: TelegramCore_PeerReference_Group.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_PeerReference_Group.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .group(id: value.id) self = .group(id: value.id)
case .peerreferenceChannel: case .peerreferenceChannel:
guard let value = flatBuffersObject.value(type: TelegramCore_PeerReference_Channel.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_PeerReference_Channel.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .channel(id: value.id, accessHash: value.accessHash) self = .channel(id: value.id, accessHash: value.accessHash)
case .none_: case .none_:
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
} }

View File

@ -302,79 +302,79 @@ extension RichText {
self = .empty self = .empty
case .richtextPlain: case .richtextPlain:
guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Plain.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Plain.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .plain(value.text) self = .plain(value.text)
case .richtextBold: case .richtextBold:
guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Bold.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Bold.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .bold(try RichText(flatBuffersObject: value.text)) self = .bold(try RichText(flatBuffersObject: value.text))
case .richtextItalic: case .richtextItalic:
guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Italic.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Italic.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .italic(try RichText(flatBuffersObject: value.text)) self = .italic(try RichText(flatBuffersObject: value.text))
case .richtextUnderline: case .richtextUnderline:
guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Underline.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Underline.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .underline(try RichText(flatBuffersObject: value.text)) self = .underline(try RichText(flatBuffersObject: value.text))
case .richtextStrikethrough: case .richtextStrikethrough:
guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Strikethrough.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Strikethrough.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .strikethrough(try RichText(flatBuffersObject: value.text)) self = .strikethrough(try RichText(flatBuffersObject: value.text))
case .richtextFixed: case .richtextFixed:
guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Fixed.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Fixed.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .fixed(try RichText(flatBuffersObject: value.text)) self = .fixed(try RichText(flatBuffersObject: value.text))
case .richtextUrl: case .richtextUrl:
guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Url.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Url.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .url(text: try RichText(flatBuffersObject: value.text), url: value.url, webpageId: value.webpageId.flatMap { MediaId($0) }) self = .url(text: try RichText(flatBuffersObject: value.text), url: value.url, webpageId: value.webpageId.flatMap { MediaId($0) })
case .richtextEmail: case .richtextEmail:
guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Email.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Email.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .email(text: try RichText(flatBuffersObject: value.text), self = .email(text: try RichText(flatBuffersObject: value.text),
email: value.email) email: value.email)
case .richtextConcat: case .richtextConcat:
guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Concat.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Concat.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .concat(try (0..<value.textsCount).map { try RichText(flatBuffersObject: value.texts(at: $0)!) }) self = .concat(try (0..<value.textsCount).map { try RichText(flatBuffersObject: value.texts(at: $0)!) })
case .richtextSubscript: case .richtextSubscript:
guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Subscript.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Subscript.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .subscript(try RichText(flatBuffersObject: value.text)) self = .subscript(try RichText(flatBuffersObject: value.text))
case .richtextSuperscript: case .richtextSuperscript:
guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Superscript.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Superscript.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .superscript(try RichText(flatBuffersObject: value.text)) self = .superscript(try RichText(flatBuffersObject: value.text))
case .richtextMarked: case .richtextMarked:
guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Marked.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Marked.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .marked(try RichText(flatBuffersObject: value.text)) self = .marked(try RichText(flatBuffersObject: value.text))
case .richtextPhone: case .richtextPhone:
guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Phone.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Phone.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .phone(text: try RichText(flatBuffersObject: value.text), self = .phone(text: try RichText(flatBuffersObject: value.text),
phone: value.phone) phone: value.phone)
case .richtextImage: case .richtextImage:
guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Image.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Image.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .image(id: MediaId(value.id), dimensions: PixelDimensions(value.dimensions)) self = .image(id: MediaId(value.id), dimensions: PixelDimensions(value.dimensions))
case .richtextAnchor: case .richtextAnchor:
guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Anchor.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_RichText_Anchor.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .anchor(text: try RichText(flatBuffersObject: value.text), self = .anchor(text: try RichText(flatBuffersObject: value.text),
name: value.name) name: value.name)

View File

@ -121,16 +121,16 @@ public enum TelegramChannelInfo: Equatable {
switch flatBuffersObject.valueType { switch flatBuffersObject.valueType {
case .telegramchannelinfoBroadcast: case .telegramchannelinfoBroadcast:
guard let value = flatBuffersObject.value(type: TelegramCore_TelegramChannelInfo_Broadcast.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_TelegramChannelInfo_Broadcast.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .broadcast(TelegramChannelBroadcastInfo(flags: TelegramChannelBroadcastFlags(rawValue: value.flags))) self = .broadcast(TelegramChannelBroadcastInfo(flags: TelegramChannelBroadcastFlags(rawValue: value.flags)))
case .telegramchannelinfoGroup: case .telegramchannelinfoGroup:
guard let value = flatBuffersObject.value(type: TelegramCore_TelegramChannelInfo_Group.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_TelegramChannelInfo_Group.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .group(TelegramChannelGroupInfo(flags: TelegramChannelGroupFlags(rawValue: value.flags))) self = .group(TelegramChannelGroupInfo(flags: TelegramChannelGroupFlags(rawValue: value.flags)))
case .none_: case .none_:
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
} }
@ -599,7 +599,7 @@ public final class TelegramChannel: Peer, Equatable {
self.participationStatus = TelegramChannelParticipationStatus(rawValue: flatBuffersObject.participationStatus) self.participationStatus = TelegramChannelParticipationStatus(rawValue: flatBuffersObject.participationStatus)
guard let infoObj = flatBuffersObject.info else { guard let infoObj = flatBuffersObject.info else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self.info = try TelegramChannelInfo(flatBuffersObject: infoObj) self.info = try TelegramChannelInfo(flatBuffersObject: infoObj)

View File

@ -47,18 +47,18 @@ public enum TelegramGroupRole: Equatable, PostboxCoding {
switch flatBuffersObject.valueType { switch flatBuffersObject.valueType {
case .telegramgrouproleCreator: case .telegramgrouproleCreator:
guard let creator = flatBuffersObject.value(type: TelegramCore_TelegramGroupRole_Creator.self) else { guard let creator = flatBuffersObject.value(type: TelegramCore_TelegramGroupRole_Creator.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .creator(rank: creator.rank) self = .creator(rank: creator.rank)
case .telegramgrouproleAdmin: case .telegramgrouproleAdmin:
guard let admin = flatBuffersObject.value(type: TelegramCore_TelegramGroupRole_Admin.self) else { guard let admin = flatBuffersObject.value(type: TelegramCore_TelegramGroupRole_Admin.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .admin(try TelegramChatAdminRights(flatBuffersObject: admin.rights), rank: admin.rank) self = .admin(try TelegramChatAdminRights(flatBuffersObject: admin.rights), rank: admin.rank)
case .telegramgrouproleMember: case .telegramgrouproleMember:
self = .member self = .member
case .none_: case .none_:
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
} }
@ -250,7 +250,7 @@ public final class TelegramGroup: Peer, Equatable {
self.participantCount = Int(flatBuffersObject.participantCount) self.participantCount = Int(flatBuffersObject.participantCount)
guard let role = flatBuffersObject.role else { guard let role = flatBuffersObject.role else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self.role = try TelegramGroupRole(flatBuffersObject: role) self.role = try TelegramGroupRole(flatBuffersObject: role)

View File

@ -126,19 +126,19 @@ public enum StickerPackReference: PostboxCoding, Hashable, Equatable, Codable {
switch flatBuffersObject.valueType { switch flatBuffersObject.valueType {
case .stickerpackreferenceId: case .stickerpackreferenceId:
guard let value = flatBuffersObject.value(type: TelegramCore_StickerPackReference_Id.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_StickerPackReference_Id.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .id(id: value.id, accessHash: value.accessHash) self = .id(id: value.id, accessHash: value.accessHash)
case .stickerpackreferenceName: case .stickerpackreferenceName:
guard let value = flatBuffersObject.value(type: TelegramCore_StickerPackReference_Name.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_StickerPackReference_Name.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .name(value.name) self = .name(value.name)
case .stickerpackreferenceAnimatedemoji: case .stickerpackreferenceAnimatedemoji:
self = .animatedEmoji self = .animatedEmoji
case .stickerpackreferenceDice: case .stickerpackreferenceDice:
guard let value = flatBuffersObject.value(type: TelegramCore_StickerPackReference_Dice.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_StickerPackReference_Dice.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .dice(value.emoji) self = .dice(value.emoji)
case .stickerpackreferenceAnimatedemojianimations: case .stickerpackreferenceAnimatedemojianimations:
@ -154,7 +154,7 @@ public enum StickerPackReference: PostboxCoding, Hashable, Equatable, Codable {
case .stickerpackreferenceIconchannelstatusemoji: case .stickerpackreferenceIconchannelstatusemoji:
self = .iconChannelStatusEmoji self = .iconChannelStatusEmoji
case .none_: case .none_:
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
} }
@ -478,29 +478,29 @@ public enum TelegramMediaFileAttribute: PostboxCoding, Equatable {
switch flatBuffersObject.valueType { switch flatBuffersObject.valueType {
case .telegrammediafileattributeFilename: case .telegrammediafileattributeFilename:
guard let value = flatBuffersObject.value(type: TelegramCore_TelegramMediaFileAttribute_FileName.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_TelegramMediaFileAttribute_FileName.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .FileName(fileName: value.fileName) self = .FileName(fileName: value.fileName)
case .telegrammediafileattributeSticker: case .telegrammediafileattributeSticker:
guard let value = flatBuffersObject.value(type: TelegramCore_TelegramMediaFileAttribute_Sticker.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_TelegramMediaFileAttribute_Sticker.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .Sticker(displayText: value.displayText, packReference: try value.packReference.flatMap({ try StickerPackReference(flatBuffersObject: $0) }), maskData: value.maskData.flatMap({ StickerMaskCoords(flatBuffersObject: $0) })) self = .Sticker(displayText: value.displayText, packReference: try value.packReference.flatMap({ try StickerPackReference(flatBuffersObject: $0) }), maskData: value.maskData.flatMap({ StickerMaskCoords(flatBuffersObject: $0) }))
case .telegrammediafileattributeImagesize: case .telegrammediafileattributeImagesize:
guard let value = flatBuffersObject.value(type: TelegramCore_TelegramMediaFileAttribute_ImageSize.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_TelegramMediaFileAttribute_ImageSize.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .ImageSize(size: PixelDimensions(width: value.width, height: value.height)) self = .ImageSize(size: PixelDimensions(width: value.width, height: value.height))
case .telegrammediafileattributeAnimated: case .telegrammediafileattributeAnimated:
self = .Animated self = .Animated
case .telegrammediafileattributeVideo: case .telegrammediafileattributeVideo:
guard let value = flatBuffersObject.value(type: TelegramCore_TelegramMediaFileAttribute_Video.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_TelegramMediaFileAttribute_Video.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .Video(duration: Double(value.duration), size: PixelDimensions(width: value.width, height: value.height), flags: TelegramMediaVideoFlags(rawValue: value.flags), preloadSize: value.preloadSize == 0 ? nil : value.preloadSize, coverTime: value.coverTime == 0.0 ? nil : Double(value.coverTime), videoCodec: value.videoCodec) self = .Video(duration: Double(value.duration), size: PixelDimensions(width: value.width, height: value.height), flags: TelegramMediaVideoFlags(rawValue: value.flags), preloadSize: value.preloadSize == 0 ? nil : value.preloadSize, coverTime: value.coverTime == 0.0 ? nil : Double(value.coverTime), videoCodec: value.videoCodec)
case .telegrammediafileattributeAudio: case .telegrammediafileattributeAudio:
guard let value = flatBuffersObject.value(type: TelegramCore_TelegramMediaFileAttribute_Audio.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_TelegramMediaFileAttribute_Audio.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .Audio(isVoice: value.isVoice, duration: Int(value.duration), title: value.title, performer: value.performer, waveform: value.waveform.isEmpty ? nil : Data(value.waveform)) self = .Audio(isVoice: value.isVoice, duration: Int(value.duration), title: value.title, performer: value.performer, waveform: value.waveform.isEmpty ? nil : Data(value.waveform))
case .telegrammediafileattributeHaslinkedstickers: case .telegrammediafileattributeHaslinkedstickers:
@ -512,10 +512,10 @@ public enum TelegramMediaFileAttribute: PostboxCoding, Equatable {
case .telegrammediafileattributeNopremium: case .telegrammediafileattributeNopremium:
self = .NoPremium self = .NoPremium
case .none_: case .none_:
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
case .telegrammediafileattributeCustomemoji: case .telegrammediafileattributeCustomemoji:
guard let value = flatBuffersObject.value(type: TelegramCore_TelegramMediaFileAttribute_CustomEmoji.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_TelegramMediaFileAttribute_CustomEmoji.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self = .CustomEmoji(isPremium: value.isPremium, isSingleColor: value.isSingleColor, alt: value.alt, packReference: try value.packReference.flatMap({ try StickerPackReference(flatBuffersObject: $0) })) self = .CustomEmoji(isPremium: value.isPremium, isSingleColor: value.isSingleColor, alt: value.alt, packReference: try value.packReference.flatMap({ try StickerPackReference(flatBuffersObject: $0) }))
} }

View File

@ -219,16 +219,16 @@ public final class TelegramMediaImage: Media, Equatable, Codable {
switch flatBuffersObject.contentType { switch flatBuffersObject.contentType {
case .emojimarkupContentEmoji: case .emojimarkupContentEmoji:
guard let value = flatBuffersObject.content(type: TelegramCore_EmojiMarkup_Content_Emoji.self) else { guard let value = flatBuffersObject.content(type: TelegramCore_EmojiMarkup_Content_Emoji.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self.content = .emoji(fileId: value.fileId) self.content = .emoji(fileId: value.fileId)
case .emojimarkupContentSticker: case .emojimarkupContentSticker:
guard let value = flatBuffersObject.content(type: TelegramCore_EmojiMarkup_Content_Sticker.self) else { guard let value = flatBuffersObject.content(type: TelegramCore_EmojiMarkup_Content_Sticker.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self.content = .sticker(packReference: try StickerPackReference(flatBuffersObject: value.packReference), fileId: value.fileId) self.content = .sticker(packReference: try StickerPackReference(flatBuffersObject: value.packReference), fileId: value.fileId)
case .none_: case .none_:
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
self.backgroundColors = flatBuffersObject.backgroundColors self.backgroundColors = flatBuffersObject.backgroundColors

View File

@ -3,24 +3,36 @@ import FlatBuffers
import FlatSerialization import FlatSerialization
import Postbox import Postbox
#if DEBUG && false #if DEBUG
public var flatBuffers_checkedGet: Bool = true
#else
public var flatBuffers_checkedGet: Bool = false
#endif
@inline(__always)
public func FlatBuffers_getRoot<T: FlatBufferObject & Verifiable>( public func FlatBuffers_getRoot<T: FlatBufferObject & Verifiable>(
byteBuffer: inout ByteBuffer, byteBuffer: inout ByteBuffer,
fileId: String? = nil, fileId: String? = nil,
options: VerifierOptions = .init() options: VerifierOptions = .init()
) -> T { ) -> T {
return try! getCheckedRoot(byteBuffer: &byteBuffer, fileId: fileId, options: options) if flatBuffers_checkedGet {
return getRoot(byteBuffer: &byteBuffer)
} else {
return try! getCheckedRoot(byteBuffer: &byteBuffer, fileId: fileId, options: options)
}
} }
#else
@inline(__always)
public func FlatBuffers_getRoot<T: FlatBufferObject>(byteBuffer: inout ByteBuffer) -> T {
return getRoot(byteBuffer: &byteBuffer)
}
#endif
public enum FlatBuffersError: Error { public enum FlatBuffersError: Error {
case missingRequiredField(file: String, line: Int) case value_missingRequiredField(file: String, line: Int)
case invalidUnionType case invalidUnionType
public static func missingRequiredField(file: String = #file, line: Int = #line) -> FlatBuffersError {
if flatBuffers_checkedGet {
preconditionFailure()
}
return .value_missingRequiredField(file: file, line: line)
}
} }
public extension PeerId { public extension PeerId {

View File

@ -8,16 +8,16 @@ public func TelegramMedia_parse(flatBuffersObject: TelegramCore_Media) throws ->
switch flatBuffersObject.valueType { switch flatBuffersObject.valueType {
case .mediaTelegrammediafile: case .mediaTelegrammediafile:
guard let value = flatBuffersObject.value(type: TelegramCore_Media_TelegramMediaFile.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_Media_TelegramMediaFile.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
return try TelegramMediaFile(flatBuffersObject: value.file) return try TelegramMediaFile(flatBuffersObject: value.file)
case .mediaTelegrammediaimage: case .mediaTelegrammediaimage:
guard let value = flatBuffersObject.value(type: TelegramCore_Media_TelegramMediaImage.self) else { guard let value = flatBuffersObject.value(type: TelegramCore_Media_TelegramMediaImage.self) else {
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
return try TelegramMediaImage(flatBuffersObject: value.image) return try TelegramMediaImage(flatBuffersObject: value.image)
case .none_: case .none_:
throw FlatBuffersError.missingRequiredField(file: #file, line: #line) throw FlatBuffersError.missingRequiredField()
} }
} }

View File

@ -65,6 +65,7 @@ public struct ExperimentalUISettings: Codable, Equatable {
public var devRequests: Bool public var devRequests: Bool
public var fakeAds: Bool public var fakeAds: Bool
public var conferenceDebug: Bool public var conferenceDebug: Bool
public var checkSerializedData: Bool
public static var defaultSettings: ExperimentalUISettings { public static var defaultSettings: ExperimentalUISettings {
return ExperimentalUISettings( return ExperimentalUISettings(
@ -107,7 +108,8 @@ public struct ExperimentalUISettings: Codable, Equatable {
playerV2: false, playerV2: false,
devRequests: false, devRequests: false,
fakeAds: false, fakeAds: false,
conferenceDebug: false conferenceDebug: false,
checkSerializedData: false
) )
} }
@ -151,7 +153,8 @@ public struct ExperimentalUISettings: Codable, Equatable {
playerV2: Bool, playerV2: Bool,
devRequests: Bool, devRequests: Bool,
fakeAds: Bool, fakeAds: Bool,
conferenceDebug: Bool conferenceDebug: Bool,
checkSerializedData: Bool
) { ) {
self.keepChatNavigationStack = keepChatNavigationStack self.keepChatNavigationStack = keepChatNavigationStack
self.skipReadHistory = skipReadHistory self.skipReadHistory = skipReadHistory
@ -193,6 +196,7 @@ public struct ExperimentalUISettings: Codable, Equatable {
self.devRequests = devRequests self.devRequests = devRequests
self.fakeAds = fakeAds self.fakeAds = fakeAds
self.conferenceDebug = conferenceDebug self.conferenceDebug = conferenceDebug
self.checkSerializedData = checkSerializedData
} }
public init(from decoder: Decoder) throws { public init(from decoder: Decoder) throws {
@ -238,6 +242,7 @@ public struct ExperimentalUISettings: Codable, Equatable {
self.devRequests = try container.decodeIfPresent(Bool.self, forKey: "devRequests") ?? false self.devRequests = try container.decodeIfPresent(Bool.self, forKey: "devRequests") ?? false
self.fakeAds = try container.decodeIfPresent(Bool.self, forKey: "fakeAds") ?? false self.fakeAds = try container.decodeIfPresent(Bool.self, forKey: "fakeAds") ?? false
self.conferenceDebug = try container.decodeIfPresent(Bool.self, forKey: "conferenceDebug") ?? false self.conferenceDebug = try container.decodeIfPresent(Bool.self, forKey: "conferenceDebug") ?? false
self.checkSerializedData = try container.decodeIfPresent(Bool.self, forKey: "checkSerializedData") ?? false
} }
public func encode(to encoder: Encoder) throws { public func encode(to encoder: Encoder) throws {
@ -283,6 +288,7 @@ public struct ExperimentalUISettings: Codable, Equatable {
try container.encodeIfPresent(self.devRequests, forKey: "devRequests") try container.encodeIfPresent(self.devRequests, forKey: "devRequests")
try container.encodeIfPresent(self.fakeAds, forKey: "fakeAds") try container.encodeIfPresent(self.fakeAds, forKey: "fakeAds")
try container.encodeIfPresent(self.conferenceDebug, forKey: "conferenceDebug") try container.encodeIfPresent(self.conferenceDebug, forKey: "conferenceDebug")
try container.encodeIfPresent(self.checkSerializedData, forKey: "checkSerializedData")
} }
} }