mirror of
https://github.com/mindoc-org/mindoc.git
synced 2025-05-09 16:17:48 +08:00
64 lines
1.5 KiB
Go
64 lines
1.5 KiB
Go
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)
|
|
}
|