             throw _typeMismatch(at: decoder.codingPath, expectation: Float.self, reality: decoder.object)
         }
     }
-
-    public static func custom(_ closure: @escaping Closure) -> ObjectDecoder.FloatDecodingStrategy {
-        return .init(identifiers: identifiers, closure: closure)
-    }
-
-    private static let identifiers = [Float.self].map(ObjectIdentifier.init)
 }
 
 extension ObjectDecoder.DecodingStrategy where T == URL {


extension ObjectDecoder.DecodingStrategy {
    /// Decode the `T` as a custom value decoded by the given closure.
    public static func custom(_ types: [Any.Type] = [T.self],
                              _ closure: @escaping Closure) -> ObjectDecoder.DecodingStrategy<T> {
        return .init(identifiers: types.map(ObjectIdentifier.init), closure: closure)
    }
}


        var strategies = [ObjectIdentifier: Any]()
        public subscript<T>(type: T.Type) -> DecodingStrategy<T>? {
            get { return strategies[ObjectIdentifier(type)] as? DecodingStrategy<T> }
            set { strategies[ObjectIdentifier(type)] = newValue }
        }
    }

