 struct _KeyedEncodingContainer<K: CodingKey> : KeyedEncodingContainerProtocol { // swiftlint:disable:this type_name
     typealias Key = K
 
-    private let encoder: _Encoder
-
-    fileprivate init(referencing encoder: _Encoder) {
+    private let encoder: ObjectEncoder.Encoder
+
+    fileprivate init(referencing encoder: ObjectEncoder.Encoder) {
         self.encoder = encoder
     }
 


extension ObjectEncoder.EncodingStrategy where T == Decimal {
    public static let compatibleWithJSONEncoder = ObjectEncoder.EncodingStrategy<Decimal>.custom {
        guard let encoder = $1 as? _Encoder else {
            fatalError("unreachable")
        }
        encoder.object = NSDecimalNumber(decimal: $0)


extension ObjectEncoder.EncodingStrategy where T == Double {
    public static let throwOnNonConformingFloat = ObjectEncoder.DoubleEncodingStrategy.custom {
        guard let encoder = $1 as? ObjectEncoder.Encoder else {
            fatalError("unreachable")
        }
        guard !$0.isInfinite && !$0.isNaN else {
