18865: Merge branch 'main'
[arvados.git] / sdk / go / arvados / fs_filehandle.go
index 4530a7b06a4d58231f2b4d95287ee792c977431a..f50dd4612b1385f74de6c8de205b29dd01c622ec 100644 (file)
@@ -6,6 +6,7 @@ package arvados
 
 import (
        "io"
+       "io/fs"
        "os"
 )
 
@@ -73,6 +74,31 @@ func (f *filehandle) Write(p []byte) (n int, err error) {
        return
 }
 
+// dirEntry implements fs.DirEntry, see (*filehandle)ReadDir().
+type dirEntry struct {
+       os.FileInfo
+}
+
+func (ent dirEntry) Type() fs.FileMode {
+       return ent.Mode().Type()
+}
+func (ent dirEntry) Info() (fs.FileInfo, error) {
+       return ent, nil
+}
+
+// ReadDir implements fs.ReadDirFile.
+func (f *filehandle) ReadDir(count int) ([]fs.DirEntry, error) {
+       fis, err := f.Readdir(count)
+       if len(fis) == 0 {
+               return nil, err
+       }
+       ents := make([]fs.DirEntry, len(fis))
+       for i, fi := range fis {
+               ents[i] = dirEntry{fi}
+       }
+       return ents, err
+}
+
 func (f *filehandle) Readdir(count int) ([]os.FileInfo, error) {
        if !f.inode.IsDir() {
                return nil, ErrInvalidOperation