func convertValToMysqlConnInfo(v *otto.Value) *MysqlConnInfo { connInfo := &MysqlConnInfo{} if v.IsDefined() && v.IsObject() { obj := v.Object() // get username if u, err := obj.Get("username"); err == nil && u.IsString() { connInfo.Username, _ = u.ToString() } // get password if p, err := obj.Get("password"); err == nil && p.IsString() { connInfo.Password, _ = p.ToString() } // get host if h, err := obj.Get("host"); err == nil && h.IsString() { connInfo.Host, _ = h.ToString() } // get port if p, err := obj.Get("port"); err == nil && p.IsNumber() { connInfo.Port, _ = p.ToInteger() } } return connInfo }
func convertValToMap(v *otto.Value) map[string]interface{} { if v.IsDefined() && v.IsObject() { options, _ := v.Export() return options.(map[string]interface{}) } return make(map[string]interface{}) }
func formatOneLine(v otto.Value, limit int, seen map[otto.Value]bool) (string, error) { if limit == 0 { return "...", nil } switch { case v.IsBoolean(), v.IsNull(), v.IsNumber(), v.IsUndefined(): return v.String(), nil case v.IsString(): return fmt.Sprintf("%q", v.String()), nil case v.IsFunction(): n, err := v.Object().Get("name") if err != nil { return "", err } if n.IsUndefined() { return "function", nil } return fmt.Sprintf("function %s", n.String()), nil case v.IsObject(): switch v.Class() { case "Array": return formatArrayOneLine(v, limit, seen) default: return formatObjectOneLine(v, limit, seen) } default: return "", fmt.Errorf("couldn't format type %s", v.Class()) } }
func (ctx ppctx) printValue(v otto.Value, level int, inArray bool) { switch { case v.IsObject(): ctx.printObject(v.Object(), level, inArray) case v.IsNull(): specialColor.Print("null") case v.IsUndefined(): specialColor.Print("undefined") case v.IsString(): s, _ := v.ToString() stringColor.Printf("%q", s) case v.IsBoolean(): b, _ := v.ToBoolean() specialColor.Printf("%t", b) case v.IsNaN(): numberColor.Printf("NaN") case v.IsNumber(): s, _ := v.ToString() numberColor.Printf("%s", s) default: fmt.Printf("<unprintable>") } }
func formatIndent(v otto.Value, width, indent, limit, level, additional int, seen map[otto.Value]bool) (string, error) { if limit == 0 { return "...", nil } switch { case v.IsBoolean(), v.IsNull(), v.IsNumber(), v.IsUndefined(): return v.String(), nil case v.IsString(): return fmt.Sprintf("%q", v.String()), nil case v.IsFunction(): n, err := v.Object().Get("name") if err != nil { return "", err } if n.IsUndefined() { return "function", nil } return fmt.Sprintf("function %s", n.String()), nil case v.IsObject(): if d, err := formatOneLine(v, limit, seen); err != nil { return "", err } else if level*indent+additional+len(d) <= width { return d, nil } switch v.Class() { case "Array": return formatArray(v, width, indent, limit, level, seen) default: return formatObject(v, width, indent, limit, level, seen) } default: return "", fmt.Errorf("couldn't format type %s", v.Class()) } }