in lib/send.go [133:168]
func (ch sendLib) send(val, arg ref.Val) ref.Val {
name, ok := arg.(types.String)
if !ok {
return types.NoSuchOverloadErr()
}
c, ok := ch[string(name)]
if !ok {
return types.NewErr("no channel %s", name)
}
var (
v interface{}
err error
)
typ, ok := encodableTypes[val.Type()]
if ok {
v, err = val.ConvertToNative(typ)
if err != nil {
// This should never happen.
panic(fmt.Sprintf("type mapping out of sync: %v", err))
}
} else {
for _, typ := range protobufTypes {
v, err = val.ConvertToNative(typ)
if err != nil {
v = nil
} else {
break
}
}
}
if v == nil {
return types.NewErr("failed to get native value to send")
}
c <- v
return val
}