private void readValue() throws JsonParseException {
    final BsonType type = type();
    switch (type) {
      case DOUBLE:
        context.setValue(reader.readDouble());
        break;
      case INT32:
        context.setValue(reader.readInt32());
        break;
      case INT64:
        context.setValue(reader.readInt64());
        break;
      case DECIMAL128:
        context.setValue(reader.readDecimal128().bigDecimalValue());
        break;
      case DATE_TIME:
        context.setValue(reader.readDateTime());
        break;
      case TIMESTAMP:
        context.setValue(reader.readTimestamp().getValue());
        break;
      case SYMBOL:
        context.setValue(reader.readSymbol());
        break;
      case STRING:
        context.setValue(reader.readString());
        break;
      case OBJECT_ID:
        context.setValue(reader.readObjectId().toHexString());
        break;
      case REGULAR_EXPRESSION:
        context.setValue(reader.readRegularExpression().getPattern());
        break;
      case BOOLEAN:
        context.setValue(reader.readBoolean());
        break;
      case NULL:
        reader.readNull();
        context.setValue(null);
        break;
      case UNDEFINED:
        reader.readUndefined();
        context.setValue(null);
        break;
      case BINARY:
        context.setValue(reader.readBinaryData().getData());
        break;
      default:
        throw new JsonParseException(this, String.format("Unknown bson type %s (as json type %s)", type, currentToken()));
    }
  }
Read (parse) current bson value and stored it in local {@link ParseContext} cache.
criteria/mongo/src/org/immutables/criteria/mongo/bson4jackson/BsonParser.java