private JsonToken toJsonToken(BsonType type) {
    switch (type) {
      case END_OF_DOCUMENT:
        reader.readEndDocument();
        return JsonToken.END_OBJECT;
      case DOCUMENT:
        reader.readStartDocument();
        return JsonToken.START_OBJECT;
      case ARRAY:
        reader.readStartArray();
        return JsonToken.START_ARRAY;
      case OBJECT_ID:
        return JsonToken.VALUE_EMBEDDED_OBJECT;
      case BOOLEAN:
        final boolean value  = reader.readBoolean();
        return value ? JsonToken.VALUE_TRUE : JsonToken.VALUE_FALSE;
      case DATE_TIME:
        return JsonToken.VALUE_EMBEDDED_OBJECT;
      case NULL:
        reader.readNull();
        return JsonToken.VALUE_NULL;
      case REGULAR_EXPRESSION:
        return JsonToken.VALUE_EMBEDDED_OBJECT;
      case SYMBOL:
      case STRING:
        return JsonToken.VALUE_STRING;
      case INT32:
      case INT64:
        return JsonToken.VALUE_NUMBER_INT;
      case DECIMAL128:
        return JsonToken.VALUE_NUMBER_FLOAT;
      case DOUBLE:
        return JsonToken.VALUE_NUMBER_FLOAT;
      case BINARY:
        return JsonToken.VALUE_EMBEDDED_OBJECT;
      default:
        throw new IllegalStateException(String.format("Unknown type %s", type));
    }
  }
The ObjectCodec used to parse the Bson object(s)
mongo/src/org/immutables/mongo/bson4jackson/BsonParser.java