36533f7c3f
Fixes for new geth version
98 lines
1.7 KiB
Go
98 lines
1.7 KiB
Go
package files
|
|
|
|
import "sort"
|
|
|
|
type fileEntry struct {
|
|
name string
|
|
file Node
|
|
}
|
|
|
|
func (e fileEntry) Name() string {
|
|
return e.name
|
|
}
|
|
|
|
func (e fileEntry) Node() Node {
|
|
return e.file
|
|
}
|
|
|
|
func FileEntry(name string, file Node) DirEntry {
|
|
return fileEntry{
|
|
name: name,
|
|
file: file,
|
|
}
|
|
}
|
|
|
|
type sliceIterator struct {
|
|
files []DirEntry
|
|
n int
|
|
}
|
|
|
|
func (it *sliceIterator) Name() string {
|
|
return it.files[it.n].Name()
|
|
}
|
|
|
|
func (it *sliceIterator) Node() Node {
|
|
return it.files[it.n].Node()
|
|
}
|
|
|
|
func (it *sliceIterator) Next() bool {
|
|
it.n++
|
|
return it.n < len(it.files)
|
|
}
|
|
|
|
func (it *sliceIterator) Err() error {
|
|
return nil
|
|
}
|
|
|
|
// SliceFile implements Node, and provides simple directory handling.
|
|
// It contains children files, and is created from a `[]Node`.
|
|
// SliceFiles are always directories, and can't be read from or closed.
|
|
type SliceFile struct {
|
|
files []DirEntry
|
|
}
|
|
|
|
func NewMapDirectory(f map[string]Node) Directory {
|
|
ents := make([]DirEntry, 0, len(f))
|
|
for name, nd := range f {
|
|
ents = append(ents, FileEntry(name, nd))
|
|
}
|
|
sort.Slice(ents, func(i, j int) bool {
|
|
return ents[i].Name() < ents[j].Name()
|
|
})
|
|
|
|
return NewSliceDirectory(ents)
|
|
}
|
|
|
|
func NewSliceDirectory(files []DirEntry) Directory {
|
|
return &SliceFile{files}
|
|
}
|
|
|
|
func (f *SliceFile) Entries() DirIterator {
|
|
return &sliceIterator{files: f.files, n: -1}
|
|
}
|
|
|
|
func (f *SliceFile) Close() error {
|
|
return nil
|
|
}
|
|
|
|
func (f *SliceFile) Length() int {
|
|
return len(f.files)
|
|
}
|
|
|
|
func (f *SliceFile) Size() (int64, error) {
|
|
var size int64
|
|
|
|
for _, file := range f.files {
|
|
s, err := file.Node().Size()
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
size += s
|
|
}
|
|
|
|
return size, nil
|
|
}
|
|
|
|
var _ Directory = &SliceFile{}
|
|
var _ DirEntry = fileEntry{}
|