github.com/alkemics/goflow@v0.2.1/wrappers/mockingjay/graph/mockingjay.go (about) 1 // Code generated by goflow DO NOT EDIT. 2 3 //go:build !codeanalysis 4 // +build !codeanalysis 5 6 package main 7 8 import ( 9 "context" 10 11 "github.com/alkemics/goflow/example/nodes" 12 "github.com/alkemics/goflow/wrappers/mockingjay" 13 ) 14 15 /* 16 17 */ 18 type Mockingjay struct{} 19 20 func NewMockingjay() Mockingjay { 21 return Mockingjay{} 22 } 23 24 func newMockingjay(id string) Mockingjay { 25 return Mockingjay{} 26 } 27 28 /* 29 30 */ 31 func (g *Mockingjay) Run(ctx context.Context, a int, b int) (sum int) { 32 33 // __add_a outputs 34 var __add_a_aggregated int 35 36 // __add_b outputs 37 var __add_b_aggregated int 38 39 // __ctx outputs 40 var __ctx_ctx context.Context 41 42 // __output_sum_builder outputs 43 var __output_sum_builder_sum int 44 45 // add outputs 46 var add_sum int 47 48 // inputs outputs 49 var inputs_a int 50 var inputs_b int 51 52 igniteNodeID := "ignite" 53 doneNodeID := "done" 54 55 done := make(chan string) 56 defer close(done) 57 58 steps := map[string]struct { 59 deps map[string]struct{} 60 run func() 61 alreadyDone bool 62 }{ 63 64 "__add_a": { 65 deps: map[string]struct{}{ 66 "inputs": {}, 67 igniteNodeID: {}, 68 }, 69 run: func() { 70 __add_a_aggregated = inputs_a 71 done <- "__add_a" 72 }, 73 alreadyDone: false, 74 }, 75 "__add_b": { 76 deps: map[string]struct{}{ 77 "inputs": {}, 78 igniteNodeID: {}, 79 }, 80 run: func() { 81 __add_b_aggregated = inputs_b 82 done <- "__add_b" 83 }, 84 alreadyDone: false, 85 }, 86 "__ctx": { 87 deps: map[string]struct{}{ 88 igniteNodeID: {}, 89 }, 90 run: func() { 91 __ctx_ctx = ctx 92 done <- "__ctx" 93 }, 94 alreadyDone: false, 95 }, 96 "__output_sum_builder": { 97 deps: map[string]struct{}{ 98 "add": {}, 99 igniteNodeID: {}, 100 }, 101 run: func() { 102 103 __output_sum_builder_sum = add_sum 104 sum = __output_sum_builder_sum 105 done <- "__output_sum_builder" 106 }, 107 alreadyDone: false, 108 }, 109 "add": { 110 deps: map[string]struct{}{ 111 "__ctx": {}, 112 "__add_a": {}, 113 "__add_b": {}, 114 igniteNodeID: {}, 115 }, 116 run: func() { 117 118 var _mock []interface{} 119 if _mocks, ok := ctx.Value(mockingjay.ContextKey).(map[string][]interface{}); ok && _mocks != nil { 120 m, ok := _mocks["add"] 121 if ok { 122 _mock = m 123 } 124 } 125 126 if _mock != nil { 127 add_sum = _mock[0].(int) 128 } else { 129 add_sum = nodes.Adder(__add_a_aggregated, __add_b_aggregated) 130 } 131 132 done <- "add" 133 }, 134 alreadyDone: false, 135 }, 136 "inputs": { 137 deps: map[string]struct{}{ 138 igniteNodeID: {}, 139 }, 140 run: func() { 141 142 var _mock []interface{} 143 if _mocks, ok := ctx.Value(mockingjay.ContextKey).(map[string][]interface{}); ok && _mocks != nil { 144 m, ok := _mocks["inputs"] 145 if ok { 146 _mock = m 147 } 148 } 149 150 if _mock != nil { 151 inputs_a = _mock[0].(int) 152 inputs_b = _mock[1].(int) 153 } else { 154 inputs_a = a 155 inputs_b = b 156 } 157 158 done <- "inputs" 159 }, 160 alreadyDone: false, 161 }, 162 igniteNodeID: { 163 deps: map[string]struct{}{}, 164 run: func() { 165 done <- igniteNodeID 166 }, 167 alreadyDone: false, 168 }, 169 doneNodeID: { 170 deps: map[string]struct{}{ 171 "__add_a": {}, 172 "__add_b": {}, 173 "__ctx": {}, 174 "__output_sum_builder": {}, 175 "add": {}, 176 "inputs": {}, 177 }, 178 run: func() { 179 done <- doneNodeID 180 }, 181 alreadyDone: false, 182 }, 183 } 184 185 // Ignite 186 ignite := steps[igniteNodeID] 187 ignite.alreadyDone = true 188 steps[igniteNodeID] = ignite 189 go steps[igniteNodeID].run() 190 191 // Resolve the graph 192 for resolved := range done { 193 if resolved == doneNodeID { 194 // If all the graph was resolved, get out of the loop 195 break 196 } 197 198 for name, step := range steps { 199 delete(step.deps, resolved) 200 if len(step.deps) == 0 && !step.alreadyDone { 201 step.alreadyDone = true 202 steps[name] = step 203 go step.run() 204 } 205 } 206 } 207 208 return sum 209 }