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
}