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  }