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 }