gopkg.in/dedis/onet.v2@v2.0.0-20181115163211-c8f3724038a7/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 "gopkg.in/dedis/onet.v2/log" 11 ) 12 13 // WriteTomlConfig write any structure to a toml-file 14 // Takes a filename and an optional directory-name. 15 func WriteTomlConfig(conf interface{}, filename string, dirOpt ...string) { 16 buf := new(bytes.Buffer) 17 if err := toml.NewEncoder(buf).Encode(conf); err != nil { 18 log.Fatal(err) 19 } 20 err := ioutil.WriteFile(getFullName(filename, dirOpt...), buf.Bytes(), 0660) 21 if err != nil { 22 log.Fatal(err) 23 } 24 } 25 26 // ReadTomlConfig read any structure from a toml-file 27 // Takes a filename and an optional directory-name 28 func ReadTomlConfig(conf interface{}, filename string, dirOpt ...string) error { 29 buf, err := ioutil.ReadFile(getFullName(filename, dirOpt...)) 30 if err != nil { 31 pwd, _ := os.Getwd() 32 log.Lvl1("Didn't find", filename, "in", pwd) 33 return err 34 } 35 36 _, err = toml.Decode(string(buf), conf) 37 if err != nil { 38 log.Fatal(err) 39 } 40 41 return nil 42 } 43 44 /* 45 * Gets filename and dirname 46 * 47 * special cases: 48 * - filename only 49 * - filename in relative path 50 * - filename in absolute path 51 * - filename and additional path 52 */ 53 func getFullName(filename string, dirOpt ...string) string { 54 dir := filepath.Dir(filename) 55 if len(dirOpt) > 0 { 56 dir = dirOpt[0] 57 } else { 58 if dir == "" { 59 dir = "." 60 } 61 } 62 return dir + "/" + filepath.Base(filename) 63 }