1 package driver 2 3 import "time" 4 5 // FileInfo returns information about a given path. Inspired by os.FileInfo, 6 // it elides the base name method for a full path instead. 7 type FileInfo interface { 8 // Path provides the full path of the target of this file info. 9 Path() string 10 11 // Size returns current length in bytes of the file. The return value can 12 // be used to write to the end of the file at path. The value is 13 // meaningless if IsDir returns true. 14 Size() int64 15 16 // ModTime returns the modification time for the file. For backends that 17 // don't have a modification time, the creation time should be returned. 18 ModTime() time.Time 19 20 // IsDir returns true if the path is a directory. 21 IsDir() bool 22 } 23 24 // NOTE(stevvooe): The next two types, FileInfoFields and FileInfoInternal 25 // should only be used by storagedriver implementations. They should moved to 26 // a "driver" package, similar to database/sql. 27 28 // FileInfoFields provides the exported fields for implementing FileInfo 29 // interface in storagedriver implementations. It should be used with 30 // InternalFileInfo. 31 type FileInfoFields struct { 32 // Path provides the full path of the target of this file info. 33 Path string 34 35 // Size is current length in bytes of the file. The value of this field 36 // can be used to write to the end of the file at path. The value is 37 // meaningless if IsDir is set to true. 38 Size int64 39 40 // ModTime returns the modification time for the file. For backends that 41 // don't have a modification time, the creation time should be returned. 42 ModTime time.Time 43 44 // IsDir returns true if the path is a directory. 45 IsDir bool 46 } 47 48 // FileInfoInternal implements the FileInfo interface. This should only be 49 // used by storagedriver implementations that don't have a specialized 50 // FileInfo type. 51 type FileInfoInternal struct { 52 FileInfoFields 53 } 54 55 var _ FileInfo = FileInfoInternal{} 56 var _ FileInfo = &FileInfoInternal{} 57 58 // Path provides the full path of the target of this file info. 59 func (fi FileInfoInternal) Path() string { 60 return fi.FileInfoFields.Path 61 } 62 63 // Size returns current length in bytes of the file. The return value can 64 // be used to write to the end of the file at path. The value is 65 // meaningless if IsDir returns true. 66 func (fi FileInfoInternal) Size() int64 { 67 return fi.FileInfoFields.Size 68 } 69 70 // ModTime returns the modification time for the file. For backends that 71 // don't have a modification time, the creation time should be returned. 72 func (fi FileInfoInternal) ModTime() time.Time { 73 return fi.FileInfoFields.ModTime 74 } 75 76 // IsDir returns true if the path is a directory. 77 func (fi FileInfoInternal) IsDir() bool { 78 return fi.FileInfoFields.IsDir 79 } 80