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  }