github.com/christoph-karpowicz/db_mediator@v0.0.0-20210207102849-61a28a1071d8/internal/server/cfg/cfg_parser.go (about)

     1  package cfg
     2  
     3  import (
     4  	"fmt"
     5  	"io/ioutil"
     6  	"log"
     7  	"os"
     8  	"path/filepath"
     9  
    10  	"gopkg.in/yaml.v3"
    11  )
    12  
    13  // ImportYAMLDir invokes the import function on all .yaml files from
    14  // a directory.
    15  func ImportYAMLDir(dirPath string) []Config {
    16  	var cfgs []Config = make([]Config, 0)
    17  
    18  	configFiles, err := ioutil.ReadDir(dirPath)
    19  	if err != nil {
    20  		log.Fatal(err)
    21  	}
    22  
    23  	for _, configFile := range configFiles {
    24  		var config Config
    25  		switch dirPath {
    26  		case SYNCH_DIR:
    27  			config = &SynchConfig{}
    28  			cfgs = append(cfgs, config)
    29  		}
    30  
    31  		fmt.Println("Config file name: " + configFile.Name())
    32  		ImportYAMLFile(config, dirPath+"/"+configFile.Name())
    33  	}
    34  
    35  	return cfgs
    36  }
    37  
    38  // ImportYAMLFile imports a configuration file into a Config struct.
    39  func ImportYAMLFile(cfg Config, filePath string) {
    40  	fp, _ := filepath.Abs(filePath)
    41  
    42  	configFile, err := os.Open(fp)
    43  	if err != nil {
    44  		panic(err)
    45  	}
    46  	fmt.Printf("Parsing %s...\n", fp)
    47  	defer configFile.Close()
    48  
    49  	byteArray, err := ioutil.ReadAll(configFile)
    50  	if err != nil {
    51  		panic(err)
    52  	}
    53  
    54  	var marshalErr error
    55  
    56  	switch cfg.(type) {
    57  	case *DbConfigArray:
    58  		marshalErr = yaml.Unmarshal(byteArray, cfg.(*DbConfigArray))
    59  	case *SynchConfig:
    60  		marshalErr = yaml.Unmarshal(byteArray, cfg.(*SynchConfig))
    61  	}
    62  
    63  	if marshalErr != nil {
    64  		log.Fatalf("error: %v", marshalErr)
    65  	}
    66  }