github.com/go-ego/cedar@v0.10.2/io.go (about)

     1  package cedar
     2  
     3  import (
     4  	"bufio"
     5  	"io"
     6  	"os"
     7  
     8  	"encoding/gob"
     9  	"encoding/json"
    10  )
    11  
    12  // Save saves the cedar to an io.Writer,
    13  // where dataType is either "json" or "gob".
    14  func (da *Cedar) Save(out io.Writer, dataType string) error {
    15  	switch dataType {
    16  	case "gob", "GOB":
    17  		dataEecoder := gob.NewEncoder(out)
    18  		return dataEecoder.Encode(da)
    19  	case "json", "JSON":
    20  		dataEecoder := json.NewEncoder(out)
    21  		return dataEecoder.Encode(da)
    22  	}
    23  
    24  	return ErrInvalidDataType
    25  }
    26  
    27  // SaveToFile saves the cedar to a file,
    28  // where dataType is either "json" or "gob".
    29  func (da *Cedar) SaveToFile(fileName, dataType string) error {
    30  	file, err := os.OpenFile(fileName, os.O_CREATE|os.O_WRONLY, 0666)
    31  	if err != nil {
    32  		return err
    33  	}
    34  	defer file.Close()
    35  
    36  	out := bufio.NewWriter(file)
    37  	defer out.Flush()
    38  	return da.Save(out, dataType)
    39  }
    40  
    41  // Load loads the cedar from an io.Writer,
    42  // where dataType is either "json" or "gob".
    43  func (da *Cedar) Load(in io.Reader, dataType string) error {
    44  	switch dataType {
    45  	case "gob", "GOB":
    46  		dataDecoder := gob.NewDecoder(in)
    47  		return dataDecoder.Decode(da)
    48  	case "json", "JSON":
    49  		dataDecoder := json.NewDecoder(in)
    50  		return dataDecoder.Decode(da)
    51  	}
    52  
    53  	return ErrInvalidDataType
    54  }
    55  
    56  // LoadFromFile loads the cedar from a file,
    57  // where dataType is either "json" or "gob".
    58  func (da *Cedar) LoadFromFile(fileName, dataType string) error {
    59  	file, err := os.OpenFile(fileName, os.O_RDONLY, 0600)
    60  	if err != nil {
    61  		return err
    62  	}
    63  	defer file.Close()
    64  
    65  	in := bufio.NewReader(file)
    66  
    67  	return da.Load(in, dataType)
    68  }