@@ -219,9 +219,7 @@ struct RemotePostCreateParametersWordPressComEncoder: Encodable {
219219 }
220220
221221 // Pages
222- if let parentPageID = parameters. parentPageID {
223- try container. encodeIfPresent ( parentPageID, forKey: . parentPageID)
224- }
222+ try container. encodeIfPresent ( parameters. parentPageID, forKey: . parentPageID)
225223
226224 // Posts
227225 try container. encodeIfPresent ( parameters. format, forKey: . format)
@@ -297,12 +295,7 @@ struct RemotePostUpdateParametersWordPressComEncoder: Encodable {
297295 try container. encodeIfPresent ( parameters. excerpt, forKey: . excerpt)
298296 try container. encodeIfPresent ( parameters. slug, forKey: . slug)
299297 if let value = parameters. featuredImageID {
300- if let featuredImageID = value {
301- try container. encode ( featuredImageID, forKey: . featuredImageID)
302- } else {
303- // Passing `null` doesn't work.
304- try container. encode ( " " , forKey: . featuredImageID)
305- }
298+ try container. encodeNullableID ( value, forKey: . featuredImageID)
306299 }
307300 if let metadata = parameters. metadata, !metadata. isEmpty {
308301 let metadata = metadata. map ( RemotePostUpdateParametersWordPressComMetadata . init)
@@ -311,7 +304,7 @@ struct RemotePostUpdateParametersWordPressComEncoder: Encodable {
311304
312305 // Pages
313306 if let parentPageID = parameters. parentPageID {
314- try container. encodeIfPresent ( parentPageID, forKey: . parentPageID)
307+ try container. encodeNullableID ( parentPageID, forKey: . parentPageID)
315308 }
316309
317310 // Posts
@@ -370,9 +363,7 @@ struct RemotePostCreateParametersXMLRPCEncoder: Encodable {
370363 }
371364
372365 // Pages
373- if let parentPageID = parameters. parentPageID {
374- try container. encodeIfPresent ( parentPageID, forKey: . parentPageID)
375- }
366+ try container. encodeIfPresent ( parameters. parentPageID, forKey: . parentPageID)
376367
377368 // Posts
378369 try container. encodeIfPresent ( parameters. format, forKey: . format)
@@ -403,12 +394,7 @@ struct RemotePostUpdateParametersXMLRPCEncoder: Encodable {
403394 try container. encodeStringIfPresent ( parameters. excerpt, forKey: . excerpt)
404395 try container. encodeStringIfPresent ( parameters. slug, forKey: . slug)
405396 if let value = parameters. featuredImageID {
406- if let featuredImageID = value {
407- try container. encode ( featuredImageID, forKey: . featuredImageID)
408- } else {
409- // Passing `null` doesn't work.
410- try container. encode ( " " , forKey: . featuredImageID)
411- }
397+ try container. encodeNullableID ( value, forKey: . featuredImageID)
412398 }
413399 if let metadata = parameters. metadata, !metadata. isEmpty {
414400 let metadata = metadata. map ( RemotePostUpdateParametersXMLRPCMetadata . init)
@@ -417,7 +403,7 @@ struct RemotePostUpdateParametersXMLRPCEncoder: Encodable {
417403
418404 // Pages
419405 if let parentPageID = parameters. parentPageID {
420- try container. encodeIfPresent ( parentPageID, forKey: . parentPageID)
406+ try container. encodeNullableID ( parentPageID, forKey: . parentPageID)
421407 }
422408
423409 // Posts
@@ -449,4 +435,14 @@ private extension KeyedEncodingContainer {
449435 guard let value else { return }
450436 try encode ( value ?? " " , forKey: key)
451437 }
438+
439+ /// - note: Some IDs are passed as integers, but, to reset them, you need to pass
440+ /// an empty string (passing `nil` does not work)
441+ mutating func encodeNullableID( _ value: Int ? , forKey key: Key ) throws {
442+ if let value {
443+ try encode ( value, forKey: key)
444+ } else {
445+ try encode ( " " , forKey: key)
446+ }
447+ }
452448}
0 commit comments