From 9ff448f06a413496664aaa8c04e927f561d4cafb Mon Sep 17 00:00:00 2001 From: kean Date: Thu, 11 Apr 2024 15:34:48 -0400 Subject: [PATCH 1/2] Fix encoding for some XMLRPC parameters --- .../Models/RemotePostParameters.swift | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/Sources/WordPressKit/Models/RemotePostParameters.swift b/Sources/WordPressKit/Models/RemotePostParameters.swift index ba22b6cd..2bb151b4 100644 --- a/Sources/WordPressKit/Models/RemotePostParameters.swift +++ b/Sources/WordPressKit/Models/RemotePostParameters.swift @@ -35,8 +35,8 @@ public struct RemotePostUpdateParameters: Equatable { public var ifNotModifiedSince: Date? public var status: String? - public var date: Date?? - public var authorID: Int?? + public var date: Date? + public var authorID: Int? public var title: String?? public var content: String?? public var password: String?? @@ -393,14 +393,14 @@ struct RemotePostUpdateParametersXMLRPCEncoder: Encodable { func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: RemotePostXMLRPCCodingKeys.self) try container.encodeIfPresent(parameters.ifNotModifiedSince, forKey: .ifNotModifiedSince) - try container.encodeIfPresent(parameters.status, forKey: .postStatus) + try container.encodeStringIfPresent(parameters.status, forKey: .postStatus) try container.encodeIfPresent(parameters.date, forKey: .date) try container.encodeIfPresent(parameters.authorID, forKey: .authorID) - try container.encodeIfPresent(parameters.title, forKey: .title) - try container.encodeIfPresent(parameters.content, forKey: .content) - try container.encodeIfPresent(parameters.password, forKey: .password) - try container.encodeIfPresent(parameters.excerpt, forKey: .excerpt) - try container.encodeIfPresent(parameters.slug, forKey: .slug) + try container.encodeStringIfPresent(parameters.title, forKey: .title) + try container.encodeStringIfPresent(parameters.content, forKey: .content) + try container.encodeStringIfPresent(parameters.password, forKey: .password) + try container.encodeStringIfPresent(parameters.excerpt, forKey: .excerpt) + try container.encodeStringIfPresent(parameters.slug, forKey: .slug) if let value = parameters.featuredImageID { if let featuredImageID = value { try container.encode(featuredImageID, forKey: .featuredImageID) @@ -420,7 +420,7 @@ struct RemotePostUpdateParametersXMLRPCEncoder: Encodable { } // Posts - try container.encodeIfPresent(parameters.format, forKey: .format) + try container.encodeStringIfPresent(parameters.format, forKey: .format) if let tags = parameters.tags { try container.encode(tags, forKey: .tags) } @@ -440,3 +440,10 @@ struct RemotePostUpdateParametersXMLRPCMetadata: Encodable { self.value = item.value } } + +private extension KeyedEncodingContainer { + mutating func encodeStringIfPresent(_ value: String??, forKey key: Key) throws { + guard let value else { return } + try encode(value ?? "", forKey: key) + } +} From 09007896f353820a968b8d03077761c5f540d47c Mon Sep 17 00:00:00 2001 From: kean Date: Sat, 13 Apr 2024 09:29:35 -0400 Subject: [PATCH 2/2] Fix encoding for status (XMLRPC) --- Sources/WordPressKit/Models/RemotePostParameters.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/WordPressKit/Models/RemotePostParameters.swift b/Sources/WordPressKit/Models/RemotePostParameters.swift index 2bb151b4..f3309dc6 100644 --- a/Sources/WordPressKit/Models/RemotePostParameters.swift +++ b/Sources/WordPressKit/Models/RemotePostParameters.swift @@ -393,7 +393,7 @@ struct RemotePostUpdateParametersXMLRPCEncoder: Encodable { func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: RemotePostXMLRPCCodingKeys.self) try container.encodeIfPresent(parameters.ifNotModifiedSince, forKey: .ifNotModifiedSince) - try container.encodeStringIfPresent(parameters.status, forKey: .postStatus) + try container.encodeIfPresent(parameters.status, forKey: .postStatus) try container.encodeIfPresent(parameters.date, forKey: .date) try container.encodeIfPresent(parameters.authorID, forKey: .authorID) try container.encodeStringIfPresent(parameters.title, forKey: .title)