github.com/sagernet/sing@v0.2.6/common/format/fmt.go (about)

     1  package format
     2  
     3  import (
     4  	"strconv"
     5  
     6  	"github.com/sagernet/sing/common"
     7  )
     8  
     9  type Stringer interface {
    10  	String() string
    11  }
    12  
    13  func ToString(messages ...any) string {
    14  	var output string
    15  	for _, rawMessage := range messages {
    16  		if rawMessage == nil {
    17  			output += "nil"
    18  			continue
    19  		}
    20  		switch message := rawMessage.(type) {
    21  		case string:
    22  			output += message
    23  		case bool:
    24  			if message {
    25  				output += "true"
    26  			} else {
    27  				output += "false"
    28  			}
    29  		case uint:
    30  			output += strconv.FormatUint(uint64(message), 10)
    31  		case uint8:
    32  			output += strconv.FormatUint(uint64(message), 10)
    33  		case uint16:
    34  			output += strconv.FormatUint(uint64(message), 10)
    35  		case uint32:
    36  			output += strconv.FormatUint(uint64(message), 10)
    37  		case uint64:
    38  			output += strconv.FormatUint(message, 10)
    39  		case int:
    40  			output += strconv.FormatInt(int64(message), 10)
    41  		case int8:
    42  			output += strconv.FormatInt(int64(message), 10)
    43  		case int16:
    44  			output += strconv.FormatInt(int64(message), 10)
    45  		case int32:
    46  			output += strconv.FormatInt(int64(message), 10)
    47  		case int64:
    48  			output += strconv.FormatInt(message, 10)
    49  		case uintptr:
    50  			output += strconv.FormatUint(uint64(message), 10)
    51  		case error:
    52  			output += message.Error()
    53  		case Stringer:
    54  			output += message.String()
    55  		default:
    56  			panic("unknown value")
    57  		}
    58  	}
    59  	return output
    60  }
    61  
    62  func ToString0[T any](message T) string {
    63  	return ToString(message)
    64  }
    65  
    66  func MapToString[T any](arr []T) []string {
    67  	return common.Map(arr, ToString0[T])
    68  }
    69  
    70  func Seconds(seconds float64) string {
    71  	seconds100 := int(seconds * 100)
    72  	return ToString(seconds100/100, ".", seconds100%100, seconds100%10)
    73  }