fileinfo.go 1.2 KB

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