@@ -125,7 +125,7 @@ extension LoggerMiddleware {
125125 public enum StateDiffTransform {
126126 case diff( linesOfContext: Int = 2 , prefixLines: String = " π " )
127127 case newStateOnly
128- case recursive( prefixLines: String = " π " , stateName: String )
128+ case recursive( prefixLines: String = " π " , stateName: String , filters : [ String ] ? = nil )
129129 case custom( ( StateType ? , StateType ) -> String ? )
130130
131131 func transform( oldState: StateType ? , newState: StateType ) -> String ? {
@@ -137,20 +137,20 @@ extension LoggerMiddleware {
137137 ?? " \( prefixLines) No state mutation "
138138 case . newStateOnly:
139139 return dumpToString ( newState)
140- case let . recursive( prefixLines, stateName) :
141- return recursiveDiff ( prefixLines: prefixLines, stateName: stateName, before: oldState, after: newState)
140+ case let . recursive( prefixLines, stateName, filters ) :
141+ return recursiveDiff ( prefixLines: prefixLines, stateName: stateName, filters : filters , before: oldState, after: newState)
142142 case let . custom( closure) :
143143 return closure ( oldState, newState)
144144 }
145145 }
146146 }
147147
148- public static func recursiveDiff( prefixLines: String , stateName: String , before: StateType ? , after: StateType ) -> String ? {
148+ public static func recursiveDiff( prefixLines: String , stateName: String , filters : [ String ] ? = nil , before: StateType ? , after: StateType ) -> String ? {
149149 // cuts the redundant newline character from the output
150- diff ( prefix: prefixLines, name: stateName, lhs: before, rhs: after) ? . trimmingCharacters ( in: . whitespacesAndNewlines)
150+ diff ( prefix: prefixLines, name: stateName, filters : filters , lhs: before, rhs: after) ? . trimmingCharacters ( in: . whitespacesAndNewlines)
151151 }
152152
153- private static func diff< A> ( prefix: String , name: String , level: Int = 0 , lhs: A ? , rhs: A ? ) -> String ? {
153+ private static func diff< A> ( prefix: String , name: String , level: Int = 0 , filters : [ String ] ? = nil , lhs: A ? , rhs: A ? ) -> String ? {
154154
155155 guard let rightHandSide = rhs, let leftHandSide = lhs else {
156156 if let rightHandSide = rhs {
@@ -215,9 +215,17 @@ extension LoggerMiddleware {
215215 return Self . diff ( prefix: " \( prefix) \( toDotOrNotToDot) \( name) " ,
216216 name: leftChild. label ?? " # " , // label might be missing for items in collections, # represents a collection element
217217 level: level + 1 ,
218+ filters: filters,
218219 lhs: leftChild. value,
219220 rhs: rightMirror. children. first ( where: { $0. label == leftChild. label } ) ? . value)
220- } ) . compactMap { $0 }
221+ } )
222+ . compactMap { $0 }
223+ . filter { ( diffLine: String ) -> Bool in
224+ // filter diffLine if it contains a filterString
225+ false == ( filters ?? [ ] ) . contains ( where: { filterString in
226+ diffLine. contains ( filterString)
227+ } )
228+ }
221229
222230 if strings. count > 0 {
223231 return strings. joined ( separator: " \n " )
0 commit comments