stat.mx raw

   1  // Copyright 2020 The Go Authors. All rights reserved.
   2  // Use of this source code is governed by a BSD-style
   3  // license that can be found in the LICENSE file.
   4  
   5  package fs
   6  
   7  // A StatFS is a file system with a Stat method.
   8  type StatFS interface {
   9  	FS
  10  
  11  	// Stat returns a FileInfo describing the file.
  12  	// If there is an error, it should be of type *PathError.
  13  	Stat(name string) (FileInfo, error)
  14  }
  15  
  16  // Stat returns a [FileInfo] describing the named file from the file system.
  17  //
  18  // If fs implements [StatFS], Stat calls fs.Stat.
  19  // Otherwise, Stat opens the [File] to stat it.
  20  func Stat(fsys FS, name []byte) (FileInfo, error) {
  21  	if fsys, ok := fsys.(StatFS); ok {
  22  		return fsys.Stat(name)
  23  	}
  24  
  25  	file, err := fsys.Open(name)
  26  	if err != nil {
  27  		return nil, err
  28  	}
  29  	defer file.Close()
  30  	return file.Stat()
  31  }
  32