github.com/go-kivik/kivik/v4@v4.3.2/x/fsdb/filesystem/fs.go (about) 1 // Licensed under the Apache License, Version 2.0 (the "License"); you may not 2 // use this file except in compliance with the License. You may obtain a copy of 3 // the License at 4 // 5 // http://www.apache.org/licenses/LICENSE-2.0 6 // 7 // Unless required by applicable law or agreed to in writing, software 8 // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 9 // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 10 // License for the specific language governing permissions and limitations under 11 // the License. 12 13 // Package filesystem provides an abstraction around a filesystem 14 package filesystem 15 16 import ( 17 "io" 18 "os" 19 ) 20 21 // Filesystem is a filesystem implementation. 22 type Filesystem interface { 23 Mkdir(name string, perm os.FileMode) error 24 MkdirAll(path string, perm os.FileMode) error 25 Open(string) (File, error) 26 Create(string) (File, error) 27 Stat(string) (os.FileInfo, error) 28 TempFile(dir, pattern string) (File, error) 29 Rename(oldpath, newpath string) error 30 Remove(name string) error 31 Link(oldname, newname string) error 32 } 33 34 type defaultFS struct{} 35 36 var _ Filesystem = &defaultFS{} 37 38 func (fs *defaultFS) Mkdir(name string, perm os.FileMode) error { 39 return os.Mkdir(name, perm) 40 } 41 42 func (fs *defaultFS) MkdirAll(path string, perm os.FileMode) error { 43 return os.MkdirAll(path, perm) 44 } 45 46 func (fs *defaultFS) Open(name string) (File, error) { 47 return os.Open(name) 48 } 49 50 func (fs *defaultFS) TempFile(dir, pattern string) (File, error) { 51 return os.CreateTemp(dir, pattern) 52 } 53 54 func (fs *defaultFS) Create(name string) (File, error) { 55 return os.Create(name) 56 } 57 58 func (fs *defaultFS) Stat(name string) (os.FileInfo, error) { 59 return os.Stat(name) 60 } 61 62 func (fs *defaultFS) Rename(oldpath, newpath string) error { 63 return os.Rename(oldpath, newpath) 64 } 65 66 func (fs *defaultFS) Remove(name string) error { 67 return os.Remove(name) 68 } 69 70 func (fs *defaultFS) Link(oldname, newname string) error { 71 return os.Link(oldname, newname) 72 } 73 74 // File represents a file object. 75 type File interface { 76 io.Reader 77 io.Closer 78 io.Writer 79 io.ReaderAt 80 io.Seeker 81 Name() string 82 Readdir(int) ([]os.FileInfo, error) 83 Stat() (os.FileInfo, error) 84 } 85 86 type defaultFile struct { 87 *os.File 88 } 89 90 var _ File = &defaultFile{} 91 92 // Default returns the default filesystem implementation. 93 func Default() Filesystem { 94 return &defaultFS{} 95 }