Go to file
Zach Eriksen e693d4dcc8
Merge pull request #5 from 0xLeif/develop
0.3.0 Release
2021-03-02 20:36:53 -06:00
.swiftpm/xcode/package.xcworkspace Initial Commit 2021-01-11 11:07:51 -06:00
Sources/Chain Removed output from Chain.background 2021-03-02 19:42:21 -06:00
Tests Formatting 2021-03-02 20:36:12 -06:00
.gitignore Initial Commit 2021-01-11 11:07:51 -06:00
LICENSE Create LICENSE 2021-03-02 08:38:07 -06:00
Package.swift Use E in Tests 2021-03-02 19:42:42 -06:00
README.md Update README.md 2021-03-02 20:33:37 -06:00

README.md

Chain ⛓

Chain of events

Use an enum to structure the call stack.

public indirect enum Chain {
    case end
    case complete(E.Function?)
    case link(E.Function, Chain)
    case background(E.Function, Chain)
    case multi([Chain])
}

Example Code

let output = Chain.link(
    .out { "First" },
    .link(
        .in {
            print("Value: \($0)")
        },
        .multi(
            [
                .multi(
                    [
                        .end,
                        .end,
                        .end
                    ]
                ),
                .link(
                    .out { "Link" },
                    .link(
                        .out { "Last" },
                        .complete(
                            .inout { value in
                                guard case .string(let value) = value else {
                                    XCTFail()
                                    return .void
                                }
                                
                                return  .string("\(value) !!!")
                            }
                        )
                    )
                )
            ]
        )
    )
)
.run(name: "ChainTests-testOutput")

Normal Chain Output

(lldb) po output
 Variable
   array : 2 elements
     0 : Variable
      - string : "First"
     1 : Variable
       array : 2 elements
        - 0 : E.Variable.void
         1 : Variable
           array : 2 elements
             0 : Variable
               array : 3 elements
                 0 : Variable
                   array : 1 element
                    - 0 : E.Variable.void
                 1 : Variable
                   array : 1 element
                    - 0 : E.Variable.void
                 2 : Variable
                   array : 1 element
                    - 0 : E.Variable.void
             1 : Variable
               array : 2 elements
                 0 : Variable
                  - string : "Link"
                 1 : Variable
                   array : 2 elements
                     0 : Variable
                      - string : "Last"
                     1 : Variable
                       array : 1 element
                         0 : Variable
                          - string : "Last !!!"

Flattened Chain Output

(lldb) po output.flatten
 Variable
   array : 8 elements
     0 : Variable
      - string : "First"
    - 1 : E.Variable.void
    - 2 : E.Variable.void
    - 3 : E.Variable.void
    - 4 : E.Variable.void
     5 : Variable
      - string : "Link"
     6 : Variable
      - string : "Last"
     7 : Variable
      - string : "Last !!!"