Skip to content

Commit

Permalink
Updated to use JSONSerialization to avoid double encoded JSON strings.
Browse files Browse the repository at this point in the history
  • Loading branch information
Andrewangeta committed May 19, 2018
1 parent b6a6767 commit 800dce3
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 40 deletions.
14 changes: 14 additions & 0 deletions .swiftlint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
included:
- Sources
- Tests

nesting:
type_level: 2

opt_in_rules:
- closure_end_indentation
- literal_expression_end_indentation

identifier_name:
excluded:
- id
8 changes: 5 additions & 3 deletions Sources/GoogleCloudProvider/Extensions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,14 @@
import Vapor

public protocol GoogleCloudModel: Content {
func toEncodedBody() throws -> String
func toEncodedDictionary() throws -> [String: Any]
}

extension GoogleCloudModel {
public func toEncodedBody() throws -> String {
return try JSONEncoder().encode(self).convert(to: String.self)
public func toEncodedDictionary() throws -> [String: Any] {
let encoded = try JSONEncoder().encode(self)

return try JSONDecoder().decode(AnyDecodable.self, from: encoded).value as? [String: Any] ?? [:]
}
}

Expand Down
74 changes: 37 additions & 37 deletions Sources/GoogleCloudProvider/Storage/StorageBucketAPI.swift
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ public class GoogleStorageBucketAPI: StorageBucketAPI {
storageClass: StorageClass? = nil,
versioning: Versioning? = nil,
website: Website? = nil) throws -> Future<GoogleStorageBucket> {
var body: [String: String] = ["name": name]
var body: [String: Any] = ["name": name]
var query = ""

if var queryParameters = queryParameters {
Expand All @@ -123,54 +123,54 @@ public class GoogleStorageBucketAPI: StorageBucketAPI {
}

if let acl = acl {
body["acl"] = try JSONEncoder().encode(acl).convert(to: String.self)
body["acl"] = try acl.map { try $0.toEncodedDictionary() }
}

if let billing = billing {
body["billing"] = try billing.toEncodedBody()
body["billing"] = try billing.toEncodedDictionary()
}

if let cors = cors {
body["cors"] = try JSONEncoder().encode(cors).convert(to: String.self)
body["cors"] = try cors.map { try $0.toEncodedDictionary() }
}

if let defaultObjectAcl = defaultObjectAcl {
body["defaultObjectAcl"] = try JSONEncoder().encode(defaultObjectAcl).convert(to: String.self)
body["defaultObjectAcl"] = try defaultObjectAcl.map { try $0.toEncodedDictionary() }
}

if let encryption = encryption {
body["encryption"] = try encryption.toEncodedBody()
body["encryption"] = try encryption.toEncodedDictionary()
}

if let labels = labels {
body["labels"] = try JSONEncoder().encode(labels).convert(to: String.self)
body["labels"] = labels
}

if let lifecycle = lifecycle {
body["lifecycle"] = try lifecycle.toEncodedBody()
body["lifecycle"] = try lifecycle.toEncodedDictionary()
}

if let location = location {
body["location"] = location
}

if let logging = logging {
body["logging"] = try logging.toEncodedBody()
body["logging"] = try logging.toEncodedDictionary()
}

if let storageClass = storageClass {
body["storageClass"] = storageClass.rawValue
}

if let versioning = versioning {
body["versioning"] = try versioning.toEncodedBody()
body["versioning"] = try versioning.toEncodedDictionary()
}

if let website = website {
body["website"] = try website.toEncodedBody()
body["website"] = try website.toEncodedDictionary()
}

let requestBody = try JSONEncoder().encode(body).convert(to: String.self)
let requestBody = try JSONSerialization.data(withJSONObject: body).convert(to: String.self)

return try request.send(method: .POST, path: endpoint, query: query, body: requestBody)
}
Expand Down Expand Up @@ -203,54 +203,54 @@ public class GoogleStorageBucketAPI: StorageBucketAPI {
logging: Logging? = nil,
versioning: Versioning? = nil,
website: Website? = nil) throws -> Future<GoogleStorageBucket> {
var body: [String: String] = [:]
var body: [String: Any] = [:]
var query = ""

if let queryParameters = queryParameters {
query = queryParameters.queryParameters
}

if let acl = acl {
body["acl"] = try JSONEncoder().encode(acl).convert(to: String.self)
body["acl"] = try acl.map { try $0.toEncodedDictionary() }
}

if let billing = billing {
body["billing"] = try billing.toEncodedBody()
body["billing"] = try billing.toEncodedDictionary()
}

if let cors = cors {
body["cors"] = try JSONEncoder().encode(cors).convert(to: String.self)
body["cors"] = try cors.map { try $0.toEncodedDictionary() }
}

if let defaultObjectAcl = defaultObjectAcl {
body["defaultObjectAcl]"] = try JSONEncoder().encode(defaultObjectAcl).convert(to: String.self)
body["defaultObjectAcl"] = try defaultObjectAcl.map { try $0.toEncodedDictionary() }
}

if let encryption = encryption {
body["encryption"] = try encryption.toEncodedBody()
body["encryption"] = try encryption.toEncodedDictionary()
}

if let labels = labels {
body["labels"] = try JSONEncoder().encode(labels).convert(to: String.self)
body["labels"] = labels
}

if let lifecycle = lifecycle {
body["lifecycle"] = try lifecycle.toEncodedBody()
body["lifecycle"] = try lifecycle.toEncodedDictionary()
}

if let logging = logging {
body["logging"] = try logging.toEncodedBody()
body["logging"] = try logging.toEncodedDictionary()
}

if let versioning = versioning {
body["versioning"] = try versioning.toEncodedBody()
body["versioning"] = try versioning.toEncodedDictionary()
}

if let website = website {
body["website"] = try website.toEncodedBody()
body["website"] = try website.toEncodedDictionary()
}

let requestBody = try JSONEncoder().encode(body).convert(to: String.self)
let requestBody = try JSONSerialization.data(withJSONObject: body).convert(to: String.self)

return try request.send(method: .PATCH, path: endpoint, query: query, body: requestBody)
}
Expand All @@ -265,7 +265,7 @@ public class GoogleStorageBucketAPI: StorageBucketAPI {
query = queryParameters.queryParameters
}

let requestBody = try iamPolicy.toEncodedBody()
let requestBody = try JSONSerialization.data(withJSONObject: try iamPolicy.toEncodedDictionary()).convert(to: String.self)

return try request.send(method: .PUT, path: "\(endpoint)/\(bucket)/iam", query: query, body: requestBody)
}
Expand Down Expand Up @@ -305,57 +305,57 @@ public class GoogleStorageBucketAPI: StorageBucketAPI {
storageClass: StorageClass? = nil,
versioning: Versioning? = nil,
website: Website? = nil) throws -> Future<GoogleStorageBucket> {
var body: [String: String] = [:]
var body: [String: Any] = [:]
var query = ""

body["acl"] = try JSONEncoder().encode(acl).convert(to: String.self)
body["acl"] = try acl.map { try $0.toEncodedDictionary() }

if let queryParameters = queryParameters {
query = queryParameters.queryParameters
}


if let billing = billing {
body["billing"] = try billing.toEncodedBody()
body["billing"] = try billing.toEncodedDictionary()
}

if let cors = cors {
body["cors"] = try JSONEncoder().encode(cors).convert(to: String.self)
body["cors"] = try cors.map { try $0.toEncodedDictionary() }
}

if let defaultObjectAcl = defaultObjectAcl {
body["defaultObjectAcl"] = try JSONEncoder().encode(defaultObjectAcl).convert(to: String.self)
body["defaultObjectAcl"] = try defaultObjectAcl.map { try $0.toEncodedDictionary() }
}

if let encryption = encryption {
body["encryption"] = try encryption.toEncodedBody()
body["encryption"] = try encryption.toEncodedDictionary()
}

if let labels = labels {
body["labels"] = try JSONEncoder().encode(labels).convert(to: String.self)
body["labels"] = labels
}

if let lifecycle = lifecycle {
body["lifecycle"] = try lifecycle.toEncodedBody()
body["lifecycle"] = try lifecycle.toEncodedDictionary()
}

if let logging = logging {
body["logging"] = try logging.toEncodedBody()
body["logging"] = try logging.toEncodedDictionary()
}

if let storageClass = storageClass {
body["storageClass"] = storageClass.rawValue
}

if let versioning = versioning {
body["versioning"] = try versioning.toEncodedBody()
body["versioning"] = try versioning.toEncodedDictionary()
}

if let website = website {
body["website"] = try website.toEncodedBody()
body["website"] = try website.toEncodedDictionary()
}

let requestBody = try JSONEncoder().encode(body).convert(to: String.self)
let requestBody = try JSONSerialization.data(withJSONObject: body).convert(to: String.self)

return try request.send(method: .PUT, path: "\(endpoint)/\(bucket)", query: query, body: requestBody)
}
Expand Down

0 comments on commit 800dce3

Please sign in to comment.