docs: public Observable<SearchViewState> search(String searchString) {
      // Empty String, so no search
      if (searchString.isEmpty()) {
        return Observable.just(new SearchViewState.SearchNotStartedYet());
      }
  
      // search for product
      return searchEngine.searchFor(searchString)
          .map(products -> {
            if (products.isEmpty()) {
              return new SearchViewState.EmptyResult(searchString);
            } else {
              return new SearchViewState.SearchResult(searchString, products);
            }
          })
          .startWith(new SearchViewState.Loading())
          .onErrorReturn(error -> new SearchViewState.Error(searchString, error));
    }