code: @Internal
  	public static <L, R> Right<L, R> obtainRight(Either<L, R> input, TypeSerializer<R> rightSerializer) {
  		if (input.isRight()) {
  			return (Right<L, R>) input;
  		} else {
  			Left<L, R> left = (Left<L, R>) input;
  			if (left.right == null) {
  				left.right = Right.of(rightSerializer.createInstance());
  				left.right.left = left;
  			}
  			return left.right;
  		}
  	}
docs: Utility function for {@link EitherSerializer} to support object reuse.
  
  To support object reuse both subclasses of Either contain a reference to
  an instance of the other type. This method provides access to and
  initializes the cross-reference.
  
  @param input container for Left or Right value
  @param rightSerializer for creating an instance of the right type
  @param <L>
  the type of Left
  @param <R>
  the type of Right
  @return input if Right type else input's Right reference