Есть ли способ использовать Объединить для кодирования объекта в urlRequest.httpBody
или вернуть ошибку декодирования как AnyPublisher с определенным типом ошибки.
Я не могу заставить это работать, и кажется,не быть примерами кода для кодирования объектов с использованием комбината. Необходимость принудительного приведения ошибки кодирования к AnyPublisher кажется неправильной / небезопасной.
Спасибо
func create(object: ExampleObject, token: Token) -> AnyPublisher<ExampleObject, API.Error> {
let url = API.EndPoint.players.url
var urlRequest = URLRequest(url: url)
urlRequest.httpMethod = "POST"
urlRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
urlRequest.addValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
do {
// is there a safe combine way to encode this
urlRequest.httpBody = try JSONEncoder().encode(object)
} catch {
// Is there a better way to handle this
return error as! AnyPublisher<ExampleObject, API.Error>
}
return session
.dataTaskPublisher(for: urlRequest)
.map(\.data)
.decode(type: ExampleObject.self, decoder: JSONDecoder())
.mapError { error in
switch error {
case is URLError:
return API.Error.addressUnreachable
default:
return API.Error.invalidResponse
}
}
.eraseToAnyPublisher()
}