func readDir()

in lib/file.go [139:168]


func readDir(arg ref.Val) ref.Val {
	path, ok := arg.(types.String)
	if !ok {
		return types.ValOrErr(path, "no such overload for dir: %s", arg.Type())
	}
	f, err := os.Open(string(path))
	if err != nil {
		return types.NewErr("dir: %v", err)
	}
	dir, err := f.ReadDir(0)
	if err != nil {
		return types.NewErr("dir: %v", err)
	}
	// Stabilise order across platforms.
	sort.Slice(dir, func(i, j int) bool { return dir[i].Name() < dir[j].Name() })
	res := make([]map[string]interface{}, len(dir))
	for i, e := range dir {
		fi, err := e.Info()
		if err != nil {
			return types.NewErr("dir: %v", err)
		}
		res[i] = map[string]interface{}{
			"name":     e.Name(),
			"is_dir":   e.IsDir(),
			"size":     fi.Size(),
			"mod_time": fi.ModTime(),
		}
	}
	return types.NewDynamicList(types.DefaultTypeAdapter, res)
}