code: public AsyncReadOperation<BsonDocument> asExplainableOperationAsync(final ExplainVerbosity explainVerbosity) {
          notNull("explainVerbosity", explainVerbosity);
          return new AsyncReadOperation<BsonDocument>() {
              @Override
              public void executeAsync(final AsyncReadBinding binding, final SingleResultCallback<BsonDocument> callback) {
                  withConnection(binding, new AsyncCallableWithConnectionAndSource() {
                      @Override
                      public void call(final AsyncConnectionSource connectionSource, final AsyncConnection connection, final Throwable t) {
                          SingleResultCallback<BsonDocument> errHandlingCallback = errorHandlingCallback(callback, LOGGER);
                          if (t != null) {
                              errHandlingCallback.onResult(null, t);
                          } else {
                              AsyncReadBinding singleConnectionReadBinding =
                              new AsyncSingleConnectionReadBinding(binding.getReadPreference(), connectionSource.getServerDescription(),
                                                                   connection);
  
                              if (serverIsAtLeastVersionThreeDotTwo(connection.getDescription())) {
                                  new CommandReadOperation<BsonDocument>(namespace.getDatabaseName(),
                                                                         new BsonDocument("explain", getCommand(binding.getSessionContext())),
                                                                         new BsonDocumentCodec())
                                  .executeAsync(singleConnectionReadBinding,
                                                releasingCallback(exceptionTransformingCallback(errHandlingCallback),
                                                                  singleConnectionReadBinding, connectionSource, connection));
                              } else {
                                  createExplainableQueryOperation()
                                  .executeAsync(singleConnectionReadBinding,
                                                releasingCallback(new ExplainResultCallback(errHandlingCallback),
                                                        singleConnectionReadBinding, connectionSource, connection));
                              }
                          }
                      }
                  });
              }
          };
      }
docs: Gets an operation whose execution explains this operation.
  
  @param explainVerbosity the explain verbosity
  @return a read operation that when executed will explain this operation