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  }