docs: @MainThread
      protected void subscribeViewState(@NonNull Observable<VS> viewStateObservable,
                                        @NonNull ViewStateConsumer<V, VS> consumer) {
          if (subscribeViewStateMethodCalled) {
              throw new IllegalStateException(
                      "subscribeViewState() method is only allowed to be called once");
          }
          subscribeViewStateMethodCalled = true;
  
          if (viewStateObservable == null) {
              throw new NullPointerException("ViewState Observable is null");
          }
  
          if (consumer == null) {
              throw new NullPointerException("ViewStateBinder is null");
          }
  
          this.viewStateConsumer = consumer;
  
          viewStateDisposable = viewStateObservable.subscribeWith(
                  new DisposableViewStateObserver<>(viewStateBehaviorSubject));
      }