code: public static <TResult> Observable<TResult> observe(final Block<SingleResultCallback<TResult>> operation) {
          return new Observable<TResult>() {
              @Override
              public void subscribe(final Observer<? super TResult> observer) {
                  new SingleResultCallbackSubscription<TResult>(operation, observer);
              }
          };
      }
docs: Allows the conversion of {@link SingleResultCallback} based operations into an {@link Observable}
  
  <p>Requires a {@link Block} that is passed the callback to be used with the operation.
  This is required to make sure that the operation only occurs once the {@link Subscription} signals for data.</p>
  <p>
  A typical example would be when wrapping callback based methods to make them observable. <br>
  For example, converting {@link MongoCollection#count(SingleResultCallback)} into an {@link Observable}:
  <pre>
  {@code
  Observable<Long> countObservable = observe(new Block<SingleResultCallback<Long>>() {
  public void apply(final SingleResultCallback<Long> callback) {
  collection.countDocuments(callback);
  }
  });
  }
  </pre>
  
  @param operation the block that implements the operation.
  @param <TResult> The type of result being observed
  @return the observable version of the callback based operation