import Foundation extension AppState { static func reducer(state: inout AppState, action: AppAction) { switch action { case .flushState: state = AppState() case .changeFlow(let flow): state.previousFlow = state.currentFlow state.currentFlow = flow case .startAction(let action): StartState.reducer(state: &state.startState, action: action) case .databaseAction, .xmppAction, .empty: break // database and xmpp actions are processed by other middlewares case .accountsAction(let action): AccountsState.reducer(state: &state.accountsState, action: action) case .rostersAction(let action): RostersState.reducer(state: &state.rostersState, action: action) case .chatsAction(let action): ChatsState.reducer(state: &state.chatsState, action: action) } } }