class MultiErrorStateGenerator internal constructor( internal val generators: List ) : (Throwable) -> ViewState.Error { override fun invoke( throwable: Throwable ): ViewState.Error { val errorStateFactory = ErrorStateFactory( throwable ) val defaultError = errorStateFactory.default val generatorsIterator = generators.iterator() while ( generatorsIterator.hasNext() ) { val generatedError = generatorsIterator.next().invoke( errorStateFactory, throwable ) if ( generatedError != defaultError ) return generatedError } return defaultError } } /** @return [MultiErrorStateGenerator] from 2 [ErrorStateGenerator] */ operator fun ErrorStateGenerator.plus( other: ErrorStateGenerator ) = MultiErrorStateGenerator( listOf( this, other ) ) /** @return [MultiErrorStateGenerator] from a [MultiErrorStateGenerator] and an [ErrorStateGenerator] */ operator fun MultiErrorStateGenerator.plus( other: ErrorStateGenerator ) = MultiErrorStateGenerator( generators + other )