| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- package app
- import (
- "encoding/json"
- "fmt"
- "io"
- "reflect"
- "strconv"
- "strings"
- "github.com/maxence-charriere/go-app/v9/pkg/errors"
- )
- func toString(v any) string {
- switch v := v.(type) {
- case string:
- return v
- case []byte:
- return string(v)
- case int:
- return strconv.Itoa(v)
- case float64:
- return strconv.FormatFloat(v, 'f', 4, 64)
- case bool:
- return strconv.FormatBool(v)
- case nil:
- return ""
- default:
- return fmt.Sprint(v)
- }
- }
- func toPath(v ...any) string {
- var b strings.Builder
- for _, o := range v {
- s := toString(o)
- if s == "" {
- continue
- }
- b.WriteByte('/')
- b.WriteString(s)
- }
- return b.String()
- }
- func writeIndent(w io.Writer, indent int) {
- for i := 0; i < indent*2; i++ {
- io.WriteString(w, " ")
- }
- }
- func ln() []byte {
- return []byte("\n")
- }
- func pxToString(px int) string {
- return strconv.Itoa(px) + "px"
- }
- func stringTo(s string, v any) error {
- val := reflect.ValueOf(v)
- if val.Kind() != reflect.Ptr {
- return errors.New("receiver in not a pointer").Tag("receiver-type", val.Type())
- }
- val = val.Elem()
- switch val.Kind() {
- case reflect.String:
- val.SetString(s)
- case reflect.Int,
- reflect.Int8,
- reflect.Int16,
- reflect.Int32,
- reflect.Int64:
- i, _ := strconv.ParseInt(s, 10, 0)
- val.SetInt(i)
- case reflect.Uint,
- reflect.Uint8,
- reflect.Uint16,
- reflect.Uint32,
- reflect.Uint64:
- i, _ := strconv.ParseUint(s, 10, 0)
- val.SetUint(i)
- case reflect.Float64:
- f, _ := strconv.ParseFloat(s, 64)
- val.SetFloat(f)
- case reflect.Float32:
- f, _ := strconv.ParseFloat(s, 32)
- val.SetFloat(f)
- default:
- return errors.New("string cannot be converted to receiver type").
- Tag("string", s).
- Tag("receiver-type", val.Type())
- }
- return nil
- }
- // AppendClass adds c to the given class string.
- func AppendClass(class, c string) string {
- if c == "" {
- return class
- }
- if class != "" {
- class += " "
- }
- class += c
- return class
- }
- func jsonString(v any) string {
- b, err := json.Marshal(v)
- if err != nil {
- panic(errors.New("converting value to json string failed").Wrap(err))
- }
- return string(b)
- }
|