         fileprivate func decode(from value: DecoderValue, path: [String]) throws -> Float {
             switch self {
             case .double:
-                let double = try value.decode(asType: Double.self, path: path)
+                let double = try value.unwrap(asType: Double.self, path: path)
                 return Float(double)
             case .string:
-                let string	 = try value.decode(asType: String.self, path: path)
+                let string = try value.unwrap(asType: String.self, path: path)
                 
                 guard let float = Float(string) else {
                     throw BSONValueNotFound(type: Float.self, path: path)

        }
    }
    
    public enum IntegerDecodingStrategy<I: Integer> {
        case string
        case int32
        case int64
        case anyInteger
        case roundingAnyNumber
        case custom(DecodingStrategy<I>)
    }
    
    public enum DoubleDecodingStrategy {

    }
    
    func decode(_ type: Int.Type) throws -> Int {
        return try self.decoder.settings.intDecodingStrategy.decode(from: self.decoder, path: self.path)
    }
    
    func decode(_ type: Int8.Type) throws -> Int8 {
        return try self.decoder.settings.int8DecodingStrategy.decode(from: self.decoder, path: self.path)
    }
    
    func decode(_ type: Int16.Type) throws -> Int16 {
        return try self.decoder.settings.int16DecodingStrategy.decode(from: self.decoder, path: self.path)
    }
    
    func decode(_ type: Int32.Type) throws -> Int32 {
        return try self.decoder.settings.int32DecodingStrategy.decode(from: self.decoder, path: self.path)
    }
    
    func decode(_ type: Int64.Type) throws -> Int64 {
        return try self.decoder.settings.int64DecodingStrategy.decode(from: self.decoder, path: self.path)
    }
    
    func decode(_ type: UInt.Type) throws -> UInt {
        return try self.decoder.settings.uintDecodingStrategy.decode(from: self.decoder, path: self.path)
    }
    
    func decode(_ type: UInt8.Type) throws -> UInt8 {
        return try self.decoder.settings.uint8DecodingStrategy.decode(from: self.decoder, path: self.path)
    }
    
    func decode(_ type: UInt16.Type) throws -> UInt16 {
        return try self.decoder.settings.uint16DecodingStrategy.decode(from: self.decoder, path: self.path)
    }
    
    func decode(_ type: UInt32.Type) throws -> UInt32 {
        return try self.decoder.settings.uint32DecodingStrategy.decode(from: self.decoder, path: self.path)
    }
    
    func decode(_ type: UInt64.Type) throws -> UInt64 {
        return try self.decoder.settings.uint64DecodingStrategy.decode(from: self.decoder, path: self.path)
    }
    
    func decode<T>(_ type: T.Type) throws -> T where T : Decodable {
        
    }
}

fileprivate struct UnkeyedBSONContainer: UnkeyedDecodingContainer {
    
}

