github.com/geniusesgroup/libgo@v0.0.0-20220713101832-828057a9d3d4/protocol/storage-file.go (about) 1 /* For license and copyright information please see LEGAL file in repository */ 2 3 package protocol 4 5 // FileDirectory is the descriptor interface that must implement by any to be an file! 6 // File owner is one app so it must handle concurrent protection internally not by file it self! 7 type FileDirectory interface { 8 Metadata() FileDirectoryMetadata 9 ParentDirectory() (dir FileDirectory) 10 11 Directories(offset, limit uint64) (dirs []FileDirectory) 12 Directory(name string) (dir FileDirectory, err Error) // make if not exist before 13 14 Files(offset, limit uint64) (files []File) 15 File(name string) (file File, err Error) // make if not exist before 16 FileByPath(uriPath string) (file File, err Error) 17 18 FindFiles(partName string, num uint) (files []File) 19 FindFile(partName string) (file File) // return first match file. It will prevent unneeded slice allocation. 20 21 Rename(oldURIPath, newURIPath string) (err Error) 22 Copy(uriPath, newURIPath string) (err Error) 23 Move(uriPath, newURIPath string) (err Error) 24 Delete(uriPath string) (err Error) // make invisible just by remove from primary index 25 Erase(uriPath string) (err Error) // make invisible by remove from primary index & write zero data to all file locations 26 } 27 28 // FileDirectoryMetadata is the interface that must implement by any file and directory! 29 type FileDirectoryMetadata interface { 30 DirNum() uint // return number of directory save in this directory 31 FileNum() uint // return number of file save in this directory 32 33 FileMetadata 34 } 35 36 // File is the descriptor interface that must implement by any to be an file! 37 // File owner is one app so it must handle concurrent protection internally not by file it self! 38 type File interface { 39 Metadata() FileMetadata 40 Data() FileData 41 ParentDirectory() (dir FileDirectory) 42 43 Rename(newName string) 44 } 45 46 // FileMetadata is the interface that must implement by any file and directory! 47 type FileMetadata interface { 48 URI() FileURI 49 Size() uint64 // in Byte 50 Created() Time 51 Accessed() Time 52 Modified() Time 53 } 54 55 // https://datatracker.ietf.org/doc/html/rfc8089 56 // https://en.wikipedia.org/wiki/File_URI_scheme 57 type FileURI interface { 58 URI 59 // URI() string // always return full file uri as "{{file}}://{{sabz.city}}/{{path/to/{{{{the file}}.{{html}}}}}}" 60 // Scheme() string // always return "file" 61 Domain() string 62 Path() string // File location from root directory include file name. 63 Name() string // Full name with extension if exist 64 Extension() string 65 NameWithoutExtension() string 66 67 // Helper functions 68 IsDirectory() bool // Path end with "/" if it is a file directory 69 } 70 71 type FileData interface { 72 // Depend on OS, file data can be cache on ram until Save() called! 73 Save() (err Error) 74 75 Prepend(data []byte) 76 Append(data []byte) 77 Replace(old, new []byte, n int) 78 Codec 79 }