mirror of
https://github.com/GrandpaNutz/fafda.git
synced 2026-01-12 02:32:59 +00:00
84 lines
2.2 KiB
Go
84 lines
2.2 KiB
Go
package internal
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/gob"
|
|
"os"
|
|
"path"
|
|
"time"
|
|
)
|
|
|
|
type Node struct {
|
|
id string
|
|
path string
|
|
name string
|
|
isDir bool
|
|
size int64
|
|
mode os.FileMode
|
|
createdAt time.Time
|
|
modTime time.Time
|
|
}
|
|
|
|
func (n *Node) Id() string { return n.id }
|
|
func (n *Node) Name() string { return path.Base(n.path) }
|
|
func (n *Node) Size() int64 { return n.size }
|
|
func (n *Node) Mode() os.FileMode { return n.mode }
|
|
func (n *Node) ModTime() time.Time { return n.modTime }
|
|
func (n *Node) IsDir() bool { return n.isDir }
|
|
func (n *Node) Sys() interface{} { return nil }
|
|
func (n *Node) Stat() (os.FileInfo, error) { return n, nil }
|
|
func (n *Node) Path() string { return n.path }
|
|
|
|
func (n *Node) SetId(id string) *Node { n.id = id; return n }
|
|
func (n *Node) SetPath(path string) *Node { n.path = path; return n }
|
|
func (n *Node) SetIsDir(isDir bool) *Node { n.isDir = isDir; return n }
|
|
func (n *Node) SetSize(size int64) *Node { n.size = size; return n }
|
|
func (n *Node) SetMode(mode os.FileMode) *Node { n.mode = mode; return n }
|
|
func (n *Node) SetCreatedAt(t time.Time) *Node { n.createdAt = t; return n }
|
|
func (n *Node) SetModTime(t time.Time) *Node { n.modTime = t; return n }
|
|
|
|
type nodeAlias struct {
|
|
Id string
|
|
Path string
|
|
Name string
|
|
IsDir bool
|
|
Size int64
|
|
Mode os.FileMode
|
|
CreatedAt time.Time
|
|
ModTime time.Time
|
|
}
|
|
|
|
func (n *Node) GobEncode() ([]byte, error) {
|
|
var buf bytes.Buffer
|
|
if err := gob.NewEncoder(&buf).Encode(nodeAlias{
|
|
Id: n.id,
|
|
Path: n.path,
|
|
Name: n.name,
|
|
IsDir: n.isDir,
|
|
Size: n.size,
|
|
Mode: n.mode,
|
|
CreatedAt: n.createdAt,
|
|
ModTime: n.modTime,
|
|
}); err != nil {
|
|
return nil, err
|
|
}
|
|
return buf.Bytes(), nil
|
|
}
|
|
|
|
func (n *Node) GobDecode(data []byte) error {
|
|
var alias nodeAlias
|
|
if err := gob.NewDecoder(bytes.NewBuffer(data)).Decode(&alias); err != nil {
|
|
return err
|
|
}
|
|
|
|
n.id = alias.Id
|
|
n.path = alias.Path
|
|
n.name = alias.Name
|
|
n.isDir = alias.IsDir
|
|
n.size = alias.Size
|
|
n.mode = alias.Mode
|
|
n.createdAt = alias.CreatedAt
|
|
n.modTime = alias.ModTime
|
|
|
|
return nil
|
|
}
|