github.com/akkaraju-satvik/dbmap@v0.0.3-0.20240414054547-f818701a74f0/config/config.go (about)

     1  package config
     2  
     3  import (
     4  	"encoding/json"
     5  	"errors"
     6  	"os"
     7  	"strings"
     8  
     9  	"gopkg.in/yaml.v2"
    10  )
    11  
    12  const ConfigFile = `migrations_dir: $MIGRATIONS_DIR
    13  db_url: $DB_URL
    14  `
    15  
    16  type Config struct {
    17  	MigrationsDir string `json:"migrations_dir" yaml:"migrations_dir"`
    18  	DbURL         string `json:"db_url" yaml:"db_url"`
    19  }
    20  
    21  type MissingValuesError struct {
    22  	MissingValues []string
    23  }
    24  
    25  func Read(configFilePath string) (Config, error) {
    26  	fileContent, err := os.ReadFile(configFilePath)
    27  	if err != nil {
    28  		return Config{}, err
    29  	}
    30  	if fileContent == nil {
    31  		return Config{}, nil
    32  	}
    33  	var config Config
    34  	if strings.HasSuffix(configFilePath, ".yaml") || strings.HasSuffix(configFilePath, ".yml") {
    35  		err = yaml.Unmarshal(fileContent, &config)
    36  	} else {
    37  		err = json.Unmarshal(fileContent, &config)
    38  	}
    39  	if err != nil {
    40  		return config, err
    41  	}
    42  	missingValues := handleEmptyValues(config)
    43  	if missingValues != nil {
    44  		return config, errors.New("missing values in config file: " + strings.Join(missingValues, ", "))
    45  	}
    46  	return config, nil
    47  }
    48  
    49  func handleEmptyValues(config Config) []string {
    50  	var missingValues []string
    51  	if config.MigrationsDir == "" {
    52  		missingValues = append(missingValues, "migrations_dir")
    53  	}
    54  	if config.DbURL == "" {
    55  		missingValues = append(missingValues, "db_url")
    56  	}
    57  	if len(missingValues) > 0 {
    58  		return missingValues
    59  	}
    60  	return nil
    61  }