func()

in wstl1/mapping_language/transpiler/env.go [89:138]


func (n *env) readInput(input, field string) *mpb.ValueSource {
	if v := n.readVar(input, field); v != nil {
		return v
	}

	if i, ok := n.args[input]; ok {
		return &mpb.ValueSource{
			Source: &mpb.ValueSource_FromInput{
				FromInput: &mpb.ValueSource_InputSource{
					Arg:   int32(i + 1),
					Field: field,
				},
			},
		}
	}

	if n.targets.Contains(input) {
		return &mpb.ValueSource{
			Source: &mpb.ValueSource_FromDestination{
				FromDestination: jsonutil.JoinPath(input, field),
			},
		}
	}

	if n.parent == nil {
		return nil
	}

	// Check to see if we've already read this input from the parent environment. If not, attempt to
	// read it.
	if _, ok := n.inputsFromParent[input]; !ok {
		if n.parent.readInput(input, field) != nil {
			n.inputsFromParent[input] = len(n.inputsFromParent)
		}
	}

	// At this point, if the parent environment had the input, we will have read it.
	if i, ok := n.inputsFromParent[input]; ok {
		return &mpb.ValueSource{
			Source: &mpb.ValueSource_FromInput{
				FromInput: &mpb.ValueSource_InputSource{
					Arg:   int32(len(n.args) + i + 1),
					Field: field,
				},
			},
		}
	}

	return nil
}