Golang_HomeWork/hw08_envdir_tool/env_reader.go

62 lines
1.2 KiB
Go

package main
import (
"bufio"
"io"
"io/ioutil"
"os"
"strings"
)
type Environment map[string]string
// ReadDir reads a specified directory and returns map of env variables.
// Variables represented as files where filename is name of variable, file first line is a value.
func ReadDir(dir string) (Environment, error) {
e := make(map[string]string)
files, err := ioutil.ReadDir(dir)
if err != nil {
return e, err
}
for _, file := range files {
if !file.IsDir() && file.Mode().IsRegular() {
val, err := ReadFile(dir + "/" + file.Name())
if err != nil {
return nil, err
}
key := file.Name()
if !strings.Contains(key, `=`) && !strings.Contains(key, `;`) {
e[key] = ExtractEnv(val)
}
}
}
return e, nil
}
func ReadFile(filePath string) (string, error) {
f, err := os.Open(filePath)
defer func() {
if err := f.Close(); err != nil {
return
}
}()
if err != nil {
return "", err
}
reader := bufio.NewReader(f)
b, _, err := reader.ReadLine()
if err != nil && err != io.EOF {
return "", err
}
return string(b), nil
}
func ExtractEnv(text string) string {
text = strings.TrimRight(text, " ")
text = strings.Replace(text, "\x00", "\n", -1)
return text
}