string.go 699 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package serial
  2. import (
  3. "fmt"
  4. "strings"
  5. "v2ray.com/core/common/buf"
  6. )
  7. func ToString(v interface{}) string {
  8. if v == nil {
  9. return " "
  10. }
  11. switch value := v.(type) {
  12. case string:
  13. return value
  14. case *string:
  15. return *value
  16. case fmt.Stringer:
  17. return value.String()
  18. case error:
  19. return value.Error()
  20. case []byte:
  21. return BytesToHexString(value)
  22. default:
  23. return fmt.Sprintf("%+v", value)
  24. }
  25. }
  26. func Concat(v ...interface{}) string {
  27. values := make([]string, len(v))
  28. for i, value := range v {
  29. values[i] = ToString(value)
  30. }
  31. return strings.Join(values, "")
  32. }
  33. func WriteString(s string) buf.Supplier {
  34. return func(b []byte) (int, error) {
  35. return copy(b, []byte(s)), nil
  36. }
  37. }