You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
1.5 KiB
63 lines
1.5 KiB
package cedar |
|
|
|
import ( |
|
"bufio" |
|
"encoding/gob" |
|
"encoding/json" |
|
"io" |
|
"os" |
|
) |
|
|
|
// Save saves the cedar to an io.Writer, |
|
// where dataType is either "json" or "gob". |
|
func (da *Cedar) Save(out io.Writer, dataType string) error { |
|
switch dataType { |
|
case "gob", "GOB": |
|
dataEecoder := gob.NewEncoder(out) |
|
return dataEecoder.Encode(da.cedar) |
|
case "json", "JSON": |
|
dataEecoder := json.NewEncoder(out) |
|
return dataEecoder.Encode(da.cedar) |
|
} |
|
return ErrInvalidDataType |
|
} |
|
|
|
// SaveToFile saves the cedar to a file, |
|
// where dataType is either "json" or "gob". |
|
func (da *Cedar) SaveToFile(fileName string, dataType string) error { |
|
file, err := os.OpenFile(fileName, os.O_CREATE|os.O_WRONLY, 0666) |
|
if err != nil { |
|
return err |
|
} |
|
defer file.Close() |
|
out := bufio.NewWriter(file) |
|
defer out.Flush() |
|
da.Save(out, dataType) |
|
return nil |
|
} |
|
|
|
// Load loads the cedar from an io.Writer, |
|
// where dataType is either "json" or "gob". |
|
func (da *Cedar) Load(in io.Reader, dataType string) error { |
|
switch dataType { |
|
case "gob", "GOB": |
|
dataDecoder := gob.NewDecoder(in) |
|
return dataDecoder.Decode(da.cedar) |
|
case "json", "JSON": |
|
dataDecoder := json.NewDecoder(in) |
|
return dataDecoder.Decode(da.cedar) |
|
} |
|
return ErrInvalidDataType |
|
} |
|
|
|
// LoadFromFile loads the cedar from a file, |
|
// where dataType is either "json" or "gob". |
|
func (da *Cedar) LoadFromFile(fileName string, dataType string) error { |
|
file, err := os.OpenFile(fileName, os.O_RDONLY, 0600) |
|
defer file.Close() |
|
if err != nil { |
|
return err |
|
} |
|
in := bufio.NewReader(file) |
|
return da.Load(in, dataType) |
|
}
|
|
|