fileinfo.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package vfs
  2. import (
  3. "os"
  4. "path"
  5. "time"
  6. )
  7. // FileInfo implements os.FileInfo for a Cloud Storage file.
  8. type FileInfo struct {
  9. name string
  10. sizeInBytes int64
  11. modTime time.Time
  12. mode os.FileMode
  13. }
  14. // NewFileInfo creates file info.
  15. func NewFileInfo(name string, isDirectory bool, sizeInBytes int64, modTime time.Time, fullName bool) *FileInfo {
  16. mode := os.FileMode(0644)
  17. if isDirectory {
  18. mode = os.FileMode(0755) | os.ModeDir
  19. }
  20. if !fullName {
  21. // we have always Unix style paths here
  22. name = path.Base(name)
  23. }
  24. return &FileInfo{
  25. name: name,
  26. sizeInBytes: sizeInBytes,
  27. modTime: modTime,
  28. mode: mode,
  29. }
  30. }
  31. // Name provides the base name of the file.
  32. func (fi *FileInfo) Name() string {
  33. return fi.name
  34. }
  35. // Size provides the length in bytes for a file.
  36. func (fi *FileInfo) Size() int64 {
  37. return fi.sizeInBytes
  38. }
  39. // Mode provides the file mode bits
  40. func (fi *FileInfo) Mode() os.FileMode {
  41. return fi.mode
  42. }
  43. // ModTime provides the last modification time.
  44. func (fi *FileInfo) ModTime() time.Time {
  45. return fi.modTime
  46. }
  47. // IsDir provides the abbreviation for Mode().IsDir()
  48. func (fi *FileInfo) IsDir() bool {
  49. return fi.mode&os.ModeDir != 0
  50. }
  51. // SetMode sets the file mode
  52. func (fi *FileInfo) SetMode(mode os.FileMode) {
  53. fi.mode = mode
  54. }
  55. // Sys provides the underlying data source (can return nil)
  56. func (fi *FileInfo) Sys() interface{} {
  57. return nil
  58. }