diff --git a/main.go b/main.go index 141e627..ff3bae8 100644 --- a/main.go +++ b/main.go @@ -4,6 +4,7 @@ package config import ( errors "errors" io "io" + fs "io/fs" os "os" path "path" reflect "reflect" @@ -32,10 +33,12 @@ type OnConfigBeforeValidationOptions struct { } type LoadConfigsOptionsTOML struct { - FileToJSON func(string) ([]byte, error) - StringToJSON func(string) ([]byte, error) - BytesToJSON func([]byte) ([]byte, error) - ReaderToJSON func(io.Reader) ([]byte, error) + FileToJSON func(string) ([]byte, error) + StringToJSON func(string) ([]byte, error) + BytesToJSON func([]byte) ([]byte, error) + ReaderToJSON func(io.Reader) ([]byte, error) + FileReaderToJSON func(file fs.File, closeFile bool) ([]byte, error) + FileReaderCallbackToJSON func(getFileCallback func() (fs.File, error)) ([]byte, error) } type LoadConfigsOptions struct { @@ -87,10 +90,12 @@ func New(options *NewOptions) (*Config, error) { if options.LoadConfigs != nil { byteSlicesUser, err := options.LoadConfigs(&LoadConfigsOptions{ TOML: &LoadConfigsOptionsTOML{ - FileToJSON: file.TOMLFileToJSON, - BytesToJSON: file.TOMLBytesToJSON, - StringToJSON: file.TOMLStringToJSON, - ReaderToJSON: file.TOMLReaderToJSON, + FileToJSON: file.TOMLFileToJSON, + BytesToJSON: file.TOMLBytesToJSON, + StringToJSON: file.TOMLStringToJSON, + ReaderToJSON: file.TOMLReaderToJSON, + FileReaderToJSON: file.TOMLFileReaderToJSON, + FileReaderCallbackToJSON: file.TOMLFileReaderCallbackToJSON, }, RunEnv: envRun, }) diff --git a/pkg/file/file.go b/pkg/file/file.go index 00bb61c..b02a635 100644 --- a/pkg/file/file.go +++ b/pkg/file/file.go @@ -2,16 +2,13 @@ package file import ( - ioutil "io/ioutil" os "os" filepath "path/filepath" jsoniter "github.com/json-iterator/go" ) -var ( - json = jsoniter.ConfigCompatibleWithStandardLibrary -) +var json = jsoniter.ConfigCompatibleWithStandardLibrary type WriteFileOptions struct { PathFile string @@ -24,7 +21,7 @@ func WriteFile(options *WriteFileOptions) error { return err } - err = ioutil.WriteFile(options.PathFile, options.ContentsBytes, 0644) + err = os.WriteFile(options.PathFile, options.ContentsBytes, 0644) if err != nil { return err } diff --git a/pkg/file/toml.go b/pkg/file/toml.go index feefff1..00f1a35 100644 --- a/pkg/file/toml.go +++ b/pkg/file/toml.go @@ -2,10 +2,38 @@ package file import ( io "io" + fs "io/fs" gotoml "github.com/pelletier/go-toml" ) +func TOMLFileReaderCallbackToJSON(getFileCallback func() (fs.File, error)) ([]byte, error) { + file, err := getFileCallback() + if err != nil { + return nil, err + } + defer file.Close() + + res, err := gotoml.LoadReader(file) + if err != nil { + return nil, err + } + + return JSONGenericMapToBytes(res.ToMap()) +} + +func TOMLFileReaderToJSON(input fs.File, doClose bool) ([]byte, error) { + res, err := gotoml.LoadReader(input) + if err != nil { + return nil, err + } + + if doClose { + defer input.Close() + } + return JSONGenericMapToBytes(res.ToMap()) +} + func TOMLReaderToJSON(input io.Reader) ([]byte, error) { res, err := gotoml.LoadReader(input) if err != nil {