Skip to content

Commit 5ee0443

Browse files
authored
Merge pull request #207 from P24L/fix-union-types-encoding
Fix: Add missing $type field to union type encoding across critical write operations
2 parents c0540a5 + 9db23f6 commit 5ee0443

File tree

5 files changed

+43
-25
lines changed

5 files changed

+43
-25
lines changed

Sources/ATProtoKit/Models/Lexicons/app.bsky/Feed/AppBskyFeedPost.swift

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -217,19 +217,24 @@ extension AppBskyLexicon.Feed {
217217
}
218218

219219
public func encode(to encoder: Encoder) throws {
220-
var container = encoder.singleValueContainer()
220+
var container = encoder.container(keyedBy: CodingKeys.self)
221221

222222
switch self {
223223
case .images(let imagesValue):
224-
try container.encode(imagesValue)
224+
try container.encode("app.bsky.embed.images", forKey: .type)
225+
try imagesValue.encode(to: encoder)
225226
case .video(let value):
226-
try container.encode(value)
227+
try container.encode("app.bsky.embed.video", forKey: .type)
228+
try value.encode(to: encoder)
227229
case .external(let externalValue):
228-
try container.encode(externalValue)
230+
try container.encode("app.bsky.embed.external", forKey: .type)
231+
try externalValue.encode(to: encoder)
229232
case .record(let recordValue):
230-
try container.encode(recordValue)
233+
try container.encode("app.bsky.embed.record", forKey: .type)
234+
try recordValue.encode(to: encoder)
231235
case .recordWithMedia(let recordWithMediaValue):
232-
try container.encode(recordWithMediaValue)
236+
try container.encode("app.bsky.embed.recordWithMedia", forKey: .type)
237+
try recordWithMediaValue.encode(to: encoder)
233238
default:
234239
break
235240
}
@@ -265,11 +270,12 @@ extension AppBskyLexicon.Feed {
265270
}
266271

267272
public func encode(to encoder: Encoder) throws {
268-
var container = encoder.singleValueContainer()
273+
var container = encoder.container(keyedBy: CodingKeys.self)
269274

270275
switch self {
271276
case .selfLabels(let value):
272-
try container.encode(value)
277+
try container.encode("com.atproto.label.defs#selfLabels", forKey: .type)
278+
try value.encode(to: encoder)
273279
default:
274280
break
275281
}

Sources/ATProtoKit/Models/Lexicons/app.bsky/Feed/AppBskyFeedPostgate.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,11 +129,12 @@ extension AppBskyLexicon.Feed {
129129
}
130130

131131
public func encode(to encoder: Encoder) throws {
132-
var container = encoder.singleValueContainer()
132+
var container = encoder.container(keyedBy: CodingKeys.self)
133133

134134
switch self {
135135
case .disabledRule(let disabledRule):
136-
try container.encode(disabledRule)
136+
try container.encode("app.bsky.feed.postgate#disableRule", forKey: .type)
137+
try disabledRule.encode(to: encoder)
137138
default:
138139
break
139140
}

Sources/ATProtoKit/Models/Lexicons/app.bsky/Feed/AppBskyFeedThreadgate.swift

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -186,17 +186,21 @@ extension AppBskyLexicon.Feed {
186186
}
187187

188188
public func encode(to encoder: Encoder) throws {
189-
var container = encoder.singleValueContainer()
189+
var container = encoder.container(keyedBy: CodingKeys.self)
190190

191191
switch self {
192192
case .mentionRule(let embedView):
193-
try container.encode(embedView)
193+
try container.encode("app.bsky.feed.threadgate#mentionRule", forKey: .type)
194+
try embedView.encode(to: encoder)
194195
case .followerRule(let embedView):
195-
try container.encode(embedView)
196+
try container.encode("app.bsky.feed.threadgate#followerRule", forKey: .type)
197+
try embedView.encode(to: encoder)
196198
case .followingRule(let embedView):
197-
try container.encode(embedView)
199+
try container.encode("app.bsky.feed.threadgate#followingRule", forKey: .type)
200+
try embedView.encode(to: encoder)
198201
case .listRule(let embedView):
199-
try container.encode(embedView)
202+
try container.encode("app.bsky.feed.threadgate#listRule", forKey: .type)
203+
try embedView.encode(to: encoder)
200204
default:
201205
break
202206
}

Sources/ATProtoKit/Models/Lexicons/app.bsky/Graph/AppBskyGraphList.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,11 +131,12 @@ extension AppBskyLexicon.Graph {
131131
}
132132

133133
public func encode(to encoder: Encoder) throws {
134-
var container = encoder.singleValueContainer()
134+
var container = encoder.container(keyedBy: CodingKeys.self)
135135

136136
switch self {
137137
case .selfLabels(let value):
138-
try container.encode(value)
138+
try container.encode("com.atproto.label.defs#selfLabels", forKey: .type)
139+
try value.encode(to: encoder)
139140
default:
140141
break
141142
}

Sources/ATProtoKit/Models/Lexicons/com.atproto/Repo/ComAtprotoRepoApplyWrites.swift

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -249,15 +249,18 @@ extension ComAtprotoLexicon.Repository {
249249
}
250250

251251
public func encode(to encoder: Encoder) throws {
252-
var container = encoder.singleValueContainer()
252+
var container = encoder.container(keyedBy: CodingKeys.self)
253253

254254
switch self {
255255
case .create(let value):
256-
try container.encode(value)
256+
try container.encode("com.atproto.repo.applyWrites#create", forKey: .type)
257+
try value.encode(to: encoder)
257258
case .update(let value):
258-
try container.encode(value)
259+
try container.encode("com.atproto.repo.applyWrites#update", forKey: .type)
260+
try value.encode(to: encoder)
259261
case .delete(let value):
260-
try container.encode(value)
262+
try container.encode("com.atproto.repo.applyWrites#delete", forKey: .type)
263+
try value.encode(to: encoder)
261264
default:
262265
break
263266
}
@@ -321,15 +324,18 @@ extension ComAtprotoLexicon.Repository {
321324
}
322325

323326
public func encode(to encoder: any Encoder) throws {
324-
var container = encoder.singleValueContainer()
327+
var container = encoder.container(keyedBy: CodingKeys.self)
325328

326329
switch self {
327330
case .createResult(let value):
328-
try container.encode(value)
331+
try container.encode("com.atproto.repo.applyWrites#createResult", forKey: .type)
332+
try value.encode(to: encoder)
329333
case .updateResult(let value):
330-
try container.encode(value)
334+
try container.encode("com.atproto.repo.applyWrites#updateResult", forKey: .type)
335+
try value.encode(to: encoder)
331336
case .deleteResult(let value):
332-
try container.encode(value)
337+
try container.encode("com.atproto.repo.applyWrites#deleteResult", forKey: .type)
338+
try value.encode(to: encoder)
333339
default:
334340
break
335341
}

0 commit comments

Comments
 (0)