Como fazer upload de imagem usando solicitação multipart com Moya Swift?

Estou usando o Moya 10.0.1 e estou tendo um problema ao tentar carregar uma imagem no servidor.

Eu segui oExemplo de carregamento multipartes e este é o meu código de instalação:

typealias UpdateUserAvatarParameters = (userId: Int, image: UIImage)

enum APITarget {
    case updateUserAvatar(parameters: UpdateUserAvatarParameters)
}

extension APITarget: TargetType {

    public var baseURL: URL { return URL(string: "http://domain/api")! }

    public var path: String {
        switch self {
        case .updateUserAvatar: return "/postuserimage"
        }
    }

    public var method: Moya.Method {
        switch self {
        default: return .post
        }
    }

    public var task: Task {
        switch self {
        case .updateUserAvatar(let parameters):
            let imageData = UIImagePNGRepresentation(parameters.image) ?? Data()
            let userIdData = parameters.userId.string.data(using: String.Encoding.utf8) ?? Data()

            let imageMultipartFormData = MultipartFormData(provider: .data(imageData), name: "img", fileName: "user_avatar.jpeg", mimeType: "image/jpeg")
            let userIdMultipartFormData = MultipartFormData(provider: .data(userIdData), name: "cusId")

            return .uploadMultipart([imageMultipartFormData, userIdMultipartFormData])
        }
    }

    public var sampleData: Data {
        return Data()
    }

    public var headers: [String : String]? {
        switch self {
        case .updateUserAvatar: return ["Content-type" : "multipart/form-data"]
        default: return ["Content-type" : "application/json"]
        }
    }
}

No entanto, quando faço uma solicitação, recebi um MoyaError:

let parameters = UpdateUserAvatarParameters(userId: 1, image: pickedImage)

provider.request(.updateUserAvatar(parameters: parameters), completion: { result in
    switch result {
    case .success(let response):
        do {
            try _ = response.filterSuccessfulStatusCodes()
            print("200 - 299: \(response.data)")
        } catch {
            print(error)  // This code will run because the statusCode is 500
        }

    case .failure(let error):
        print("Failure: \(error)")
    }
})

Não tenho idéia do que fiz de errado, também não sei o que é statusCode 500? Alguem sabe por quê?

Além disso, quando faço uma solicitação com o Alamofire com a mesma configuração (url, parâmetros ...), tudo funciona normalmente:

Alamofire.upload(multipartFormData: { multipartFormData in
    let imageData = UIImagePNGRepresentation(pickedImage) ?? Data()
    let userIdData = userId.string.data(using: String.Encoding.utf8) ?? Data()

    multipartFormData.append(imageData, withName: "img", fileName: "user_avatar.jpeg", mimeType: "image/jpeg")
    multipartFormData.append(userIdData, withName: "cusId")
}, to: "http://domain/api/postuserimage", encodingCompletion: { result in
    switch result {
    case .success(let upload, _, _):
        upload.uploadProgress(closure: { progress in
            print("Upload Progress: \(progress.fractionCompleted)")
        })

        upload.responseJSON(completionHandler: { response in
            print(response.result.value)
        })

    case .failure(let encodingError):
        print(encodingError)
    }
})

questionAnswers(2)

yourAnswerToTheQuestion