go.dedis.ch/onet/v3@v3.2.11-0.20210930124529-e36530bca7ef/utils.go (about) 1 package onet 2 3 import ( 4 "bytes" 5 "io/ioutil" 6 "os" 7 "path/filepath" 8 9 "github.com/BurntSushi/toml" 10 "go.dedis.ch/onet/v3/log" 11 "golang.org/x/xerrors" 12 ) 13 14 // WriteTomlConfig write any structure to a toml-file 15 // Takes a filename and an optional directory-name. 16 func WriteTomlConfig(conf interface{}, filename string, dirOpt ...string) { 17 buf := new(bytes.Buffer) 18 if err := toml.NewEncoder(buf).Encode(conf); err != nil { 19 log.Fatal(err) 20 } 21 err := ioutil.WriteFile(getFullName(filename, dirOpt...), buf.Bytes(), 0660) 22 if err != nil { 23 log.Fatal(err) 24 } 25 } 26 27 // ReadTomlConfig read any structure from a toml-file 28 // Takes a filename and an optional directory-name 29 func ReadTomlConfig(conf interface{}, filename string, dirOpt ...string) error { 30 buf, err := ioutil.ReadFile(getFullName(filename, dirOpt...)) 31 if err != nil { 32 pwd, _ := os.Getwd() 33 log.Lvl1("Didn't find", filename, "in", pwd) 34 return xerrors.Errorf("reading file: %v", err) 35 } 36 37 _, err = toml.Decode(string(buf), conf) 38 if err != nil { 39 log.Fatal("failed to parse " + filename + ": " + err.Error()) 40 } 41 42 return nil 43 } 44 45 /* 46 * Gets filename and dirname 47 * 48 * special cases: 49 * - filename only 50 * - filename in relative path 51 * - filename in absolute path 52 * - filename and additional path 53 */ 54 func getFullName(filename string, dirOpt ...string) string { 55 dir := filepath.Dir(filename) 56 if len(dirOpt) > 0 { 57 dir = dirOpt[0] 58 } else { 59 if dir == "" { 60 dir = "." 61 } 62 } 63 return dir + "/" + filepath.Base(filename) 64 }