mirror of
https://github.com/go-micro/go-micro.git
synced 2025-01-23 17:53:05 +02:00
5d5aee1f08
set the go version to 1.16 in pr.yml and tests.yml, so as to be consistent with the version in go.mod.
70 lines
1.1 KiB
Go
70 lines
1.1 KiB
Go
// Package file is a file source. Expected format is json
|
|
package file
|
|
|
|
import (
|
|
"io"
|
|
"os"
|
|
|
|
"go-micro.dev/v4/config/source"
|
|
)
|
|
|
|
type file struct {
|
|
path string
|
|
opts source.Options
|
|
}
|
|
|
|
var (
|
|
DefaultPath = "config.json"
|
|
)
|
|
|
|
func (f *file) Read() (*source.ChangeSet, error) {
|
|
fh, err := os.Open(f.path)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer fh.Close()
|
|
b, err := io.ReadAll(fh)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
info, err := fh.Stat()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
cs := &source.ChangeSet{
|
|
Format: format(f.path, f.opts.Encoder),
|
|
Source: f.String(),
|
|
Timestamp: info.ModTime(),
|
|
Data: b,
|
|
}
|
|
cs.Checksum = cs.Sum()
|
|
|
|
return cs, nil
|
|
}
|
|
|
|
func (f *file) String() string {
|
|
return "file"
|
|
}
|
|
|
|
func (f *file) Watch() (source.Watcher, error) {
|
|
if _, err := os.Stat(f.path); err != nil {
|
|
return nil, err
|
|
}
|
|
return newWatcher(f)
|
|
}
|
|
|
|
func (f *file) Write(cs *source.ChangeSet) error {
|
|
return nil
|
|
}
|
|
|
|
func NewSource(opts ...source.Option) source.Source {
|
|
options := source.NewOptions(opts...)
|
|
path := DefaultPath
|
|
f, ok := options.Context.Value(filePathKey{}).(string)
|
|
if ok {
|
|
path = f
|
|
}
|
|
return &file{opts: options, path: path}
|
|
}
|