Skip to content

Instantly share code, notes, and snippets.

@kevinzhow
Created November 28, 2022 18:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kevinzhow/ecbe1f686b427c89c7c57c47a2dd1910 to your computer and use it in GitHub Desktop.
Save kevinzhow/ecbe1f686b427c89c7c57c47a2dd1910 to your computer and use it in GitHub Desktop.
Makes the alamofire can encode protobuf easily
import Foundation
import Alamofire
open class ProtobufParameterEncoder: ParameterEncoder {
/// Returns an encoder with default parameters.
public static var `default`: ProtobufParameterEncoder { ProtobufParameterEncoder() }
public init() {}
open func encode<Parameters>(_ parameters: Parameters?,
into request: URLRequest) throws -> URLRequest {
guard let parameters = parameters else { return request }
var request = request
request.httpBody = parameters as? Data
if request.headers["Content-Type"] == nil {
request.headers.update(.contentType("application/x-protobuf"))
}
return request
}
}
extension ParameterEncoder where Self == ProtobufParameterEncoder {
/// Provides a default `ProtobufParameterEncoder` instance.
public static var protobuf: ProtobufParameterEncoder { ProtobufParameterEncoder() }
}
@kevinzhow
Copy link
Author

kevinzhow commented Nov 28, 2022

Usage

let response = await AF.request(
    ...
    parameters: try! protobufModel.serializedData(),
    encoder: .protobuf
).serializingData().response

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment