code: @Override
  	public T decode(BsonReader reader, DecoderContext decoderContext) {
  		T instance = instantiate();
  		reader.readStartDocument();
  		while (reader.readBsonType() != BsonType.END_OF_DOCUMENT) {
  			String fieldName = reader.readName();
  			BsoneeBaseSetter<T> bsoneeBaseSetter = settersByName.get(fieldName);
  			if (bsoneeBaseSetter != null) {
  				bsoneeBaseSetter.set(instance, reader, decoderContext);
  			} else {
  				// TODO Check options whether to throw an exception or not. By default we skip it :)
  				logger.warn("No setter for " + fieldName);
  				reader.skipValue();
  			}
  		}
  		reader.readEndDocument();
  		return instance;
  	}
docs: {@inhericDoc}