github.com/easysoft/zendata@v0.0.0-20240513203326-705bd5a7fd67/internal/pkg/service/res-yaml.go (about) 1 package service 2 3 import ( 4 "os" 5 6 "github.com/easysoft/zendata/internal/pkg/domain" 7 "github.com/easysoft/zendata/internal/pkg/helper" 8 fileUtils "github.com/easysoft/zendata/pkg/utils/file" 9 i118Utils "github.com/easysoft/zendata/pkg/utils/i118" 10 logUtils "github.com/easysoft/zendata/pkg/utils/log" 11 "github.com/easysoft/zendata/pkg/utils/vari" 12 "gopkg.in/yaml.v3" 13 ) 14 15 type ResYamlService struct { 16 ResConfigService *ResConfigService `inject:""` 17 ResRangesService *ResRangesService `inject:""` 18 ResInstancesService *ResInstancesService `inject:""` 19 } 20 21 func (s *ResYamlService) GetResFromYaml(resFile string) (valueMap map[string][]interface{}) { // , resName string) { 22 if vari.GlobalVars.CacheResFileToMap[resFile] != nil { // already cached 23 valueMap = vari.GlobalVars.CacheResFileToMap[resFile] 24 return 25 } 26 27 yamlContent, err := os.ReadFile(resFile) 28 if err != nil { 29 logUtils.PrintTo(i118Utils.I118Prt.Sprintf("fail_to_read_file", resFile)) 30 return 31 } 32 33 yamlContent = helper.ReplaceSpecialChars(yamlContent) 34 35 insts := domain.ResInstances{} 36 err = yaml.Unmarshal(yamlContent, &insts) 37 if err == nil && insts.Instances != nil && len(insts.Instances) > 0 { // instances 38 insts.FileDir = fileUtils.GetAbsDir(resFile) 39 valueMap = s.ResInstancesService.GetResFromInstances(insts) 40 41 } else { 42 ranges := domain.ResRanges{} 43 err = yaml.Unmarshal(yamlContent, &ranges) 44 45 if err == nil && ranges.Ranges != nil && len(ranges.Ranges) > 0 { // ranges 46 valueMap = s.ResRangesService.GetResFromRanges(ranges) 47 48 } else { 49 configRes := domain.DefField{} 50 err = yaml.Unmarshal(yamlContent, &configRes) 51 if err == nil { // config 52 valueMap = s.ResConfigService.GetResForConfig(configRes) 53 54 } 55 } 56 } 57 58 vari.GlobalVars.CacheResFileToMap[resFile] = valueMap 59 60 return 61 }