s3FileWrapper.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package s3fs
  2. import (
  3. "io/fs"
  4. "time"
  5. )
  6. /*
  7. s3FileWrapper.go
  8. S3 FileInfo and DirEntry wrappers for the arozos filesystem abstraction layer.
  9. */
  10. // S3FileInfo implements os.FileInfo for S3 objects.
  11. type S3FileInfo struct {
  12. name string
  13. size int64
  14. isDir bool
  15. modTime time.Time
  16. }
  17. func NewS3FileInfo(name string, size int64, isDir bool, modTime time.Time) *S3FileInfo {
  18. return &S3FileInfo{
  19. name: name,
  20. size: size,
  21. isDir: isDir,
  22. modTime: modTime,
  23. }
  24. }
  25. func (fi *S3FileInfo) Name() string { return fi.name }
  26. func (fi *S3FileInfo) Size() int64 { return fi.size }
  27. func (fi *S3FileInfo) Mode() fs.FileMode {
  28. if fi.isDir {
  29. return fs.ModeDir | 0755
  30. }
  31. return 0664
  32. }
  33. func (fi *S3FileInfo) ModTime() time.Time { return fi.modTime }
  34. func (fi *S3FileInfo) IsDir() bool { return fi.isDir }
  35. func (fi *S3FileInfo) Sys() interface{} { return nil }
  36. // S3DirEntry implements fs.DirEntry for S3 objects.
  37. type S3DirEntry struct {
  38. name string
  39. size int64
  40. isDir bool
  41. modTime time.Time
  42. }
  43. func NewS3DirEntry(name string, size int64, isDir bool, modTime time.Time) *S3DirEntry {
  44. return &S3DirEntry{
  45. name: name,
  46. size: size,
  47. isDir: isDir,
  48. modTime: modTime,
  49. }
  50. }
  51. func (de *S3DirEntry) Name() string { return de.name }
  52. func (de *S3DirEntry) IsDir() bool { return de.isDir }
  53. func (de *S3DirEntry) Type() fs.FileMode {
  54. if de.isDir {
  55. return fs.ModeDir
  56. }
  57. return 0
  58. }
  59. func (de *S3DirEntry) Info() (fs.FileInfo, error) {
  60. return NewS3FileInfo(de.name, de.size, de.isDir, de.modTime), nil
  61. }