🔀 Merge branch 'website/epic-games' into next
[rhynodge.git] / src / main / java / net / pterodactylus / rhynodge / queries / FallbackQuery.kt
1 package net.pterodactylus.rhynodge.queries
2
3 import net.pterodactylus.rhynodge.Query
4 import net.pterodactylus.rhynodge.State
5 import net.pterodactylus.rhynodge.states.FailedState
6
7 /**
8  * [Query] that can run a number of other [Query]s, returning the first successful [State] that is encountered.
9  *
10  * @author [David â€˜Bombe’ Roden](mailto:bombe@pterodactylus.net)
11  */
12 class FallbackQuery(private vararg val queries: Query) : Query {
13
14         init {
15                 if (queries.isEmpty()) {
16                         throw IllegalArgumentException("queries must not be empty")
17                 }
18         }
19
20         override fun state(): State {
21                 var lastFailedState: State = FailedState()
22                 queries.asSequence().map(Query::state).forEach { lastFailedState = it; if (it.success()) return it }
23                 return lastFailedState
24         }
25
26 }