@@ -2,32 +2,31 @@ import Foundation
22import os. log
33import SwiftRex
44
5- extension Middleware where StateType: Equatable {
5+ extension MiddlewareProtocol where StateType: Equatable {
66 public func logger(
7- actionTransform: LoggerMiddleware < Self > . ActionTransform = . default( ) ,
8- actionPrinter: LoggerMiddleware < Self > . ActionLogger = . osLog,
7+ actionTransform: LoggerMiddleware < InputActionType , StateType > . ActionTransform = . default( ) ,
8+ actionPrinter: LoggerMiddleware < InputActionType , StateType > . ActionLogger = . osLog,
99 actionFilter: @escaping ( InputActionType ) -> Bool = { _ in true } ,
10- stateDiffTransform: LoggerMiddleware < Self > . StateDiffTransform = . diff( ) ,
11- stateDiffPrinter: LoggerMiddleware < Self > . StateLogger = . osLog,
10+ stateDiffTransform: LoggerMiddleware < InputActionType , StateType > . StateDiffTransform = . diff( ) ,
11+ stateDiffPrinter: LoggerMiddleware < InputActionType , StateType > . StateLogger = . osLog,
1212 queue: DispatchQueue = . main
13- ) -> LoggerMiddleware < Self > {
13+ ) -> ComposedMiddleware < InputActionType , OutputActionType , StateType > {
1414 LoggerMiddleware (
15- self ,
1615 actionTransform: actionTransform,
1716 actionPrinter: actionPrinter,
1817 actionFilter: actionFilter,
1918 stateDiffTransform: stateDiffTransform,
2019 stateDiffPrinter: stateDiffPrinter,
2120 queue: queue
22- )
21+ ) . lift ( outputAction : { ( _ : Never ) -> OutputActionType in } ) <> self
2322 }
2423}
2524
26- public final class LoggerMiddleware < M : Middleware > : Middleware where M . StateType : Equatable {
27- public typealias InputActionType = M . InputActionType
28- public typealias OutputActionType = M . OutputActionType
29- public typealias StateType = M . StateType
30- private let middleware : M
25+ public final class LoggerMiddleware < Action , State : Equatable > : MiddlewareProtocol {
26+ public typealias InputActionType = Action
27+ public typealias OutputActionType = Never
28+ public typealias StateType = State
29+
3130 private let queue : DispatchQueue
3231 private var getState : GetState < StateType > ?
3332 private let actionTransform : ActionTransform
@@ -37,15 +36,13 @@ public final class LoggerMiddleware<M: Middleware>: Middleware where M.StateType
3736 private let stateDiffPrinter : StateLogger
3837
3938 init (
40- _ middleware: M ,
4139 actionTransform: ActionTransform ,
4240 actionPrinter: ActionLogger ,
4341 actionFilter: @escaping ( InputActionType ) -> Bool = { _ in true } ,
4442 stateDiffTransform: StateDiffTransform ,
4543 stateDiffPrinter: StateLogger ,
4644 queue: DispatchQueue
4745 ) {
48- self . middleware = middleware
4946 self . actionTransform = actionTransform
5047 self . actionPrinter = actionPrinter
5148 self . actionFilter = actionFilter
@@ -54,19 +51,11 @@ public final class LoggerMiddleware<M: Middleware>: Middleware where M.StateType
5451 self . queue = queue
5552 }
5653
57- public func receiveContext( getState: @escaping GetState < StateType > , output: AnyActionHandler < OutputActionType > ) {
58- self . getState = getState
59- middleware. receiveContext ( getState: getState, output: output)
60- }
61-
62- public func handle( action: InputActionType , from dispatcher: ActionSource , afterReducer: inout AfterReducer ) {
63- guard actionFilter ( action) else { return }
54+ public func handle( action: Action , from dispatcher: ActionSource , state: @escaping GetState < State > ) -> IO < Never > {
55+ guard actionFilter ( action) else { return . pure( ) }
6456 let stateBefore = getState ? ( )
65- var innerAfterReducer = AfterReducer . doNothing ( )
66-
67- middleware. handle ( action: action, from: dispatcher, afterReducer: & innerAfterReducer)
6857
69- afterReducer = innerAfterReducer <> . do { [ weak self] in
58+ return IO { [ weak self] _ in
7059 guard let self = self ,
7160 let stateAfter = self . getState ? ( ) else { return }
7261
@@ -83,15 +72,14 @@ public final class LoggerMiddleware<M: Middleware>: Middleware where M.StateType
8372
8473extension LoggerMiddleware {
8574 public static func `default`(
86- actionTransform: LoggerMiddleware < IdentityMiddleware < InputActionType , OutputActionType , StateType > > . ActionTransform = . default( ) ,
87- actionPrinter: LoggerMiddleware < IdentityMiddleware < InputActionType , OutputActionType , StateType > > . ActionLogger = . osLog,
75+ actionTransform: LoggerMiddleware < InputActionType , StateType > . ActionTransform = . default( ) ,
76+ actionPrinter: LoggerMiddleware < InputActionType , StateType > . ActionLogger = . osLog,
8877 actionFilter: @escaping ( InputActionType ) -> Bool = { _ in true } ,
89- stateDiffTransform: LoggerMiddleware < IdentityMiddleware < InputActionType , OutputActionType , StateType > > . StateDiffTransform = . diff( ) ,
90- stateDiffPrinter: LoggerMiddleware < IdentityMiddleware < InputActionType , OutputActionType , StateType > > . StateLogger = . osLog,
78+ stateDiffTransform: LoggerMiddleware < InputActionType , StateType > . StateDiffTransform = . diff( ) ,
79+ stateDiffPrinter: LoggerMiddleware < InputActionType , StateType > . StateLogger = . osLog,
9180 queue: DispatchQueue = . main
92- ) -> LoggerMiddleware < IdentityMiddleware < InputActionType , OutputActionType , StateType > > {
81+ ) -> LoggerMiddleware < InputActionType , StateType > {
9382 . init(
94- IdentityMiddleware ( ) ,
9583 actionTransform: actionTransform,
9684 actionPrinter: actionPrinter,
9785 actionFilter: actionFilter,
0 commit comments