lambdacd.stepresults.merge

Functions that can help merge several step results into one

merge-step-results

(merge-step-results step-results merge-two-results-fn)

Takes a list of step results (e.g. whats in the :outputs key of a nesting step-result) and merges it into one step result with the help of a function that can merge two step results:

> (merge-step-results [{:status :success}
                       {:foo :bar}
                       {:foo :baz}]
                      merge)
{:status :success
 :foo    :baz}

merge-two-step-results

(merge-two-step-results a b & {:keys [resolvers], :or {resolvers [merge-resolvers/status-resolver merge-resolvers/merge-nested-maps-resolver merge-resolvers/combine-to-list-resolver merge-resolvers/second-wins-resolver]}})

Takes two step results and merges them:

> (merge-two-step-results {:status :failure
                           :m      {:a :b}
                           :s      "a"}
                          {:status :success
                           :m      {:b :c}
                           :s      "b"})
{:status :failure
 :m      {:a :b
          :b :c}
 :s      "b"}

Optionally, merge-two-step-results takes a list of functions to customize how to resolve conflicts. Resolver-functions take the key where the conflict occurred and the two values and a merged result or nil if they can’t merge the conflict. If one resolver can’t resolve a conflict, the next one in the list is tried.