| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- package cli
- import (
- "os"
- "path/filepath"
- "reflect"
- "strings"
- jsoniter "github.com/json-iterator/go"
- )
- func NewJsonDecoder(dir, filename string) (*jsoniter.Decoder, error) {
- //_, filename, _, _ := runtime.Caller(1)
- filename, err := filepath.Abs(filepath.Join(dir, filename))
- if err != nil {
- return nil, err
- }
- bytes, err := os.ReadFile(filename)
- if err != nil {
- return nil, err
- }
- return jsoniter.NewDecoder(strings.NewReader(string(bytes))), nil
- }
- func WalkDir(dir string, fn func(absDir string, fs os.FileInfo) error) error {
- absDir, err := filepath.Abs(dir)
- if err != nil {
- return err
- }
- fs, err := os.ReadDir(absDir)
- if err != nil {
- return err
- }
- for _, f := range fs {
- info, _ := f.Info()
- if err = fn(absDir, info); err != nil {
- return err
- }
- }
- return nil
- }
- func ToMap[K comparable, V any](v any) (map[K]V, bool) {
- kind := reflect.TypeOf(v).Kind()
- if kind != reflect.Map {
- return nil, false
- }
- val := reflect.ValueOf(v)
- vals := make(map[K]V)
- iter := val.MapRange()
- for iter.Next() {
- k := iter.Key().Interface()
- v := iter.Value().Interface()
- vals[k.(K)] = v.(V)
- }
- return vals, true
- }
|