aboutsummaryrefslogtreecommitdiff
path: root/file.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2017-04-16 00:18:53 +0200
committerDimitri Sokolyuk <demon@dim13.org>2017-04-16 00:18:53 +0200
commitb1b78c711ebd86ae06ffcf1e5508ca78a848037b (patch)
tree8a44381f740083af85b7ae1b766e91cf9f318cbc /file.go
parentc37c5b9ca34a472732cb8c6c9914af9993d60350 (diff)
Refactor file handler
Diffstat (limited to 'file.go')
-rw-r--r--file.go56
1 files changed, 37 insertions, 19 deletions
diff --git a/file.go b/file.go
index e8218d8..0497c09 100644
--- a/file.go
+++ b/file.go
@@ -36,45 +36,58 @@ func checkComment(comment string) error {
return nil
}
-func Parse(r io.Reader) (File, error) {
+func (f *File) ReadFrom(r io.Reader) error {
buf := bufio.NewReader(r)
comment, err := buf.ReadString('\n')
if err != nil {
- return File{}, err
+ return err
}
if err := checkComment(comment); err != nil {
- return File{}, err
+ return err
}
- comment = comment[len(commentHdr):]
+ f.Comment = strings.TrimSpace(comment[len(commentHdr):])
b64, err := buf.ReadBytes('\n')
if err != nil {
- return File{}, err
+ return err
}
+ f.B64 = bytes.TrimSpace(b64)
- body, err := ioutil.ReadAll(buf)
+ f.Body, err = ioutil.ReadAll(buf)
if err != nil {
- return File{}, err
+ return err
}
- return File{
- Comment: strings.TrimSpace(comment),
- B64: bytes.TrimSpace(b64),
- Body: body,
- }, nil
+ return nil
+}
+
+func Parse(b []byte) (*File, error) {
+ r := bytes.NewReader(b)
+ f := new(File)
+ return f, f.ReadFrom(r)
}
-func ParseFile(fname string) (File, error) {
+func ParseFile(fname string) (*File, error) {
fd, err := os.Open(fname)
if err != nil {
- return File{}, err
+ return nil, err
}
defer fd.Close()
- return Parse(fd)
+ f := new(File)
+ return f, f.ReadFrom(fd)
}
-func (f File) Encode(w io.Writer) error {
+func (f File) Bytes() ([]byte, error) {
+ buf := new(bytes.Buffer)
+ err := f.WriteTo(buf)
+ if err != nil {
+ return nil, err
+ }
+ return buf.Bytes(), nil
+}
+
+func (f File) WriteTo(w io.Writer) error {
fmt.Fprintf(w, "%v%v\n", commentHdr, f.Comment)
fmt.Fprintf(w, "%v\n", string(f.B64))
if f.Body != nil {
@@ -83,11 +96,16 @@ func (f File) Encode(w io.Writer) error {
return nil
}
-func (f File) EncodeFile(fname string) error {
- fd, err := os.Create(fname)
+const (
+ SecMode os.FileMode = 0600
+ PubMode os.FileMode = 0644
+)
+
+func (f File) WriteFile(fname string, perm os.FileMode) error {
+ fd, err := os.OpenFile(fname, os.O_WRONLY|os.O_CREATE, perm)
if err != nil {
return err
}
defer fd.Close()
- return f.Encode(fd)
+ return f.WriteTo(fd)
}