gitee.com/h79/goutils@v1.22.10/loader/file.go (about)

     1  package loader
     2  
     3  import (
     4  	"gitee.com/h79/goutils/common/file"
     5  )
     6  
     7  const (
     8  	JsonFormat = "json"
     9  	XmlFormat  = "xml"
    10  	YamlFormat = "yaml"
    11  )
    12  
    13  type Filer struct {
    14  	Loader
    15  	path           string
    16  	lastModifyTime int64
    17  	da             interface{}
    18  }
    19  
    20  func NewFiler(path string, format string, data interface{}) *Loader {
    21  	l := &Filer{
    22  		Loader: CreateLoader(),
    23  		path:   path,
    24  		da:     data,
    25  	}
    26  	return l.WithFormat(format).WithLoadFunc(l.load)
    27  }
    28  
    29  func (f *Filer) load() (interface{}, error) {
    30  	lastModify, data, err := file.DecodeFileModifyTime(f.path, f.lastModifyTime, func(v []byte) (interface{}, error) {
    31  		er := f.unmarshal.Unmarshal(v, f.da)
    32  		return f.da, er
    33  	})
    34  	f.lastModifyTime = lastModify
    35  	return data, err
    36  }
    37  
    38  func JSON(filename string, data interface{}) error {
    39  	ll := NewFiler(filename, JsonFormat, data)
    40  	if err, _ := ll.Read(); err != nil {
    41  		return err
    42  	}
    43  	return nil
    44  }
    45  
    46  func XML(filename string, data interface{}) error {
    47  	ll := NewFiler(filename, XmlFormat, data)
    48  	if err, _ := ll.Read(); err != nil {
    49  		return err
    50  	}
    51  	return nil
    52  }
    53  
    54  func YAML(filename string, data interface{}) error {
    55  	ll := NewFiler(filename, YamlFormat, data)
    56  	if err, _ := ll.Read(); err != nil {
    57  		return err
    58  	}
    59  	return nil
    60  }