1
0
Эх сурвалжийг харах

Apply JSON format to `xray api` commands' output

RPRX 4 жил өмнө
parent
commit
0a9db2d3d3

+ 18 - 4
main/commands/all/api/shared.go

@@ -104,16 +104,30 @@ func fetchHTTPContent(target string) ([]byte, error) {
 }
 
 func showResponese(m proto.Message) {
+	if isNil(m) {
+		return
+	}
+	b := new(bytes.Buffer)
+	e := json.NewEncoder(b)
+	e.SetIndent("", "    ")
+	e.SetEscapeHTML(false)
+	err := e.Encode(m)
 	msg := ""
-	bs, err := proto.Marshal(m)
 	if err != nil {
-		msg = err.Error()
+		msg = fmt.Sprintf("error: %s\n\n%v", err, m)
 	} else {
-		msg = string(bs)
-		msg = strings.TrimSpace(msg)
+		msg = strings.TrimSpace(b.String())
 	}
 	if msg == "" {
 		return
 	}
 	fmt.Println(msg)
 }
+
+func isNil(i interface{}) bool {
+	vi := reflect.ValueOf(i)
+	if vi.Kind() == reflect.Ptr {
+		return vi.IsNil()
+	}
+	return i == nil
+}