func()

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
}