From fb2f3117f4797a60fde1d70353498fa1dab3ccb1 Mon Sep 17 00:00:00 2001 From: JinnyYi <82445294+JinnyYi@users.noreply.github.com> Date: Mon, 1 Nov 2021 19:02:00 +0800 Subject: [PATCH] build(deps): Remove dot-import for types package in services (#986) --- services/azblob/storage.go | 50 ++++++------ services/azfile/storage.go | 30 +++---- services/bos/service.go | 14 ++-- services/bos/storage.go | 40 ++++----- services/cephfs/storage.go | 10 +-- services/cos/storage.go | 76 ++++++++--------- services/dropbox/storage.go | 42 +++++----- services/example/storage.go | 10 +-- services/fs/storage.go | 40 ++++----- services/ftp/storage.go | 36 ++++---- services/gcs/storage.go | 40 ++++----- services/gdrive/storage.go | 28 +++---- services/hdfs/storage.go | 26 +++--- services/hdfs/utils.go | 4 +- services/ipfs/storage.go | 44 +++++----- services/kodo/storage.go | 42 +++++----- services/memory/storage.go | 48 +++++------ services/minio/service.go | 14 ++-- services/minio/storage.go | 22 ++--- services/obs/service.go | 14 ++-- services/obs/storage.go | 40 ++++----- services/ocios/storage.go | 10 +-- services/onedrive/storage.go | 24 +++--- services/oss/storage.go | 92 ++++++++++----------- services/qingstor/generated.go | 51 ------------ services/qingstor/service.go | 14 ++-- services/qingstor/service.toml | 5 +- services/qingstor/storage.go | 127 ++++++++++++----------------- services/qingstor/storager_test.go | 12 +-- services/qingstor/utils.go | 1 - services/s3/service.go | 16 ++-- services/s3/storage.go | 94 ++++++++++----------- services/storj/storage.go | 38 ++++----- services/tar/storage.go | 16 ++-- services/us3/storage.go | 10 +-- services/uss/storage.go | 36 ++++---- services/webdav/storage.go | 10 +-- services/zip/storage.go | 10 +-- 38 files changed, 582 insertions(+), 654 deletions(-) diff --git a/services/azblob/storage.go b/services/azblob/storage.go index 4eebeb41c..7261e2034 100644 --- a/services/azblob/storage.go +++ b/services/azblob/storage.go @@ -12,14 +12,14 @@ import ( ps "go.beyondstorage.io/v5/pairs" "go.beyondstorage.io/v5/pkg/iowrap" "go.beyondstorage.io/v5/services" - . "go.beyondstorage.io/v5/types" + "go.beyondstorage.io/v5/types" ) -func (s *Storage) commitAppend(ctx context.Context, o *Object, opt pairStorageCommitAppend) (err error) { +func (s *Storage) commitAppend(ctx context.Context, o *types.Object, opt pairStorageCommitAppend) (err error) { return } -func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { +func (s *Storage) create(path string, opt pairStorageCreate) (o *types.Object) { rp := s.getAbsPath(path) if opt.HasObjectMode && opt.ObjectMode.IsDir() { @@ -29,10 +29,10 @@ func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { rp += "/" o = s.newObject(true) - o.Mode = ModeDir + o.Mode = types.ModeDir } else { o = s.newObject(false) - o.Mode = ModeRead + o.Mode = types.ModeRead } o.ID = rp @@ -40,7 +40,7 @@ func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { return o } -func (s *Storage) createAppend(ctx context.Context, path string, opt pairStorageCreateAppend) (o *Object, err error) { +func (s *Storage) createAppend(ctx context.Context, path string, opt pairStorageCreateAppend) (o *types.Object, err error) { rp := s.getAbsPath(path) headers := azblob.BlobHTTPHeaders{} @@ -63,16 +63,16 @@ func (s *Storage) createAppend(ctx context.Context, path string, opt pairStorage } o = s.newObject(true) - o.Mode = ModeRead | ModeAppend + o.Mode = types.ModeRead | types.ModeAppend o.ID = rp o.Path = path o.SetAppendOffset(0) return o, nil } -func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCreateDir) (o *Object, err error) { +func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCreateDir) (o *types.Object, err error) { if !s.features.VirtualDir { - err = NewOperationNotImplementedError("create_dir") + err = types.NewOperationNotImplementedError("create_dir") return } @@ -98,7 +98,7 @@ func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCre o = s.newObject(true) o.ID = rp o.Path = path - o.Mode |= ModeDir + o.Mode |= types.ModeDir return } @@ -128,7 +128,7 @@ func (s *Storage) delete(ctx context.Context, path string, opt pairStorageDelete return nil } -func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *ObjectIterator, err error) { +func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *types.ObjectIterator, err error) { input := &objectPageStatus{ maxResults: 200, prefix: s.getAbsPath(path), @@ -136,10 +136,10 @@ func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (o if !opt.HasListMode { // Support `ListModePrefix` as the default `ListMode`. - opt.ListMode = ListModePrefix + opt.ListMode = types.ListModePrefix } - var nextFn NextObjectFunc + var nextFn types.NextObjectFunc switch { case opt.ListMode.IsDir(): @@ -151,11 +151,11 @@ func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (o return nil, services.ListModeInvalidError{Actual: opt.ListMode} } - return NewObjectIterator(ctx, nextFn, input), nil + return types.NewObjectIterator(ctx, nextFn, input), nil } -func (s *Storage) metadata(opt pairStorageMetadata) (meta *StorageMeta) { - meta = NewStorageMeta() +func (s *Storage) metadata(opt pairStorageMetadata) (meta *types.StorageMeta) { + meta = types.NewStorageMeta() meta.Name = s.name meta.WorkDir = s.workDir meta.SetWriteSizeMaximum(WriteSizeMaximum) @@ -165,7 +165,7 @@ func (s *Storage) metadata(opt pairStorageMetadata) (meta *StorageMeta) { return meta } -func (s *Storage) nextObjectPageByDir(ctx context.Context, page *ObjectPage) error { +func (s *Storage) nextObjectPageByDir(ctx context.Context, page *types.ObjectPage) error { input := page.Status.(*objectPageStatus) output, err := s.bucket.ListBlobsHierarchySegment(ctx, input.marker, input.delimiter, azblob.ListBlobsSegmentOptions{ @@ -180,7 +180,7 @@ func (s *Storage) nextObjectPageByDir(ctx context.Context, page *ObjectPage) err o := s.newObject(true) o.ID = v.Name o.Path = s.getRelPath(v.Name) - o.Mode |= ModeDir + o.Mode |= types.ModeDir page.Data = append(page.Data, o) } @@ -195,14 +195,14 @@ func (s *Storage) nextObjectPageByDir(ctx context.Context, page *ObjectPage) err } if !output.NextMarker.NotDone() { - return IterateDone + return types.IterateDone } input.marker = output.NextMarker return nil } -func (s *Storage) nextObjectPageByPrefix(ctx context.Context, page *ObjectPage) error { +func (s *Storage) nextObjectPageByPrefix(ctx context.Context, page *types.ObjectPage) error { input := page.Status.(*objectPageStatus) output, err := s.bucket.ListBlobsFlatSegment(ctx, input.marker, azblob.ListBlobsSegmentOptions{ @@ -223,7 +223,7 @@ func (s *Storage) nextObjectPageByPrefix(ctx context.Context, page *ObjectPage) } if !output.NextMarker.NotDone() { - return IterateDone + return types.IterateDone } input.marker = output.NextMarker @@ -271,7 +271,7 @@ func (s *Storage) read(ctx context.Context, path string, w io.Writer, opt pairSt return io.Copy(w, rc) } -func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *Object, err error) { +func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *types.Object, err error) { rp := s.getAbsPath(path) if opt.HasObjectMode && opt.ObjectMode.IsDir() { @@ -301,9 +301,9 @@ func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o o.Path = path if opt.HasObjectMode && opt.ObjectMode.IsDir() { - o.Mode |= ModeDir + o.Mode |= types.ModeDir } else { - o.Mode |= ModeRead + o.Mode |= types.ModeRead } o.SetContentLength(output.ContentLength()) @@ -390,7 +390,7 @@ func (s *Storage) write(ctx context.Context, path string, r io.Reader, size int6 return size, nil } -func (s *Storage) writeAppend(ctx context.Context, o *Object, r io.Reader, size int64, opt pairStorageWriteAppend) (n int64, err error) { +func (s *Storage) writeAppend(ctx context.Context, o *types.Object, r io.Reader, size int64, opt pairStorageWriteAppend) (n int64, err error) { if size > AppendSizeMaximum { err = fmt.Errorf("size limit exceeded: %w", services.ErrRestrictionDissatisfied) return diff --git a/services/azfile/storage.go b/services/azfile/storage.go index 3c765894d..1aca0d1d8 100644 --- a/services/azfile/storage.go +++ b/services/azfile/storage.go @@ -12,18 +12,18 @@ import ( "github.com/Azure/azure-storage-file-go/azfile" "go.beyondstorage.io/v5/pkg/iowrap" - . "go.beyondstorage.io/v5/types" + "go.beyondstorage.io/v5/types" ) -func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { +func (s *Storage) create(path string, opt pairStorageCreate) (o *types.Object) { rp := s.getAbsPath(path) if opt.HasObjectMode && opt.ObjectMode.IsDir() { o = s.newObject(true) - o.Mode |= ModeDir + o.Mode |= types.ModeDir } else { o = s.newObject(false) - o.Mode |= ModeRead + o.Mode |= types.ModeRead } o.ID = rp @@ -32,7 +32,7 @@ func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { return o } -func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCreateDir) (o *Object, err error) { +func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCreateDir) (o *types.Object, err error) { rp := s.getAbsPath(path) attribute := azfile.FileAttributeNone @@ -61,7 +61,7 @@ func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCre o.ID = rp o.Path = path - o.Mode |= ModeDir + o.Mode |= types.ModeDir return } @@ -89,22 +89,22 @@ func (s *Storage) delete(ctx context.Context, path string, opt pairStorageDelete return nil } -func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *ObjectIterator, err error) { +func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *types.ObjectIterator, err error) { input := &objectPageStatus{ maxResults: 200, prefix: s.getRelativePath(path), } - return NewObjectIterator(ctx, s.nextObjectPage, input), nil + return types.NewObjectIterator(ctx, s.nextObjectPage, input), nil } -func (s *Storage) metadata(opt pairStorageMetadata) (meta *StorageMeta) { - meta = NewStorageMeta() +func (s *Storage) metadata(opt pairStorageMetadata) (meta *types.StorageMeta) { + meta = types.NewStorageMeta() meta.WorkDir = s.workDir return meta } -func (s *Storage) nextObjectPage(ctx context.Context, page *ObjectPage) error { +func (s *Storage) nextObjectPage(ctx context.Context, page *types.ObjectPage) error { input := page.Status.(*objectPageStatus) options := azfile.ListFilesAndDirectoriesOptions{ @@ -136,7 +136,7 @@ func (s *Storage) nextObjectPage(ctx context.Context, page *ObjectPage) error { } if !output.NextMarker.NotDone() { - return IterateDone + return types.IterateDone } input.marker = output.NextMarker @@ -174,7 +174,7 @@ func (s *Storage) read(ctx context.Context, path string, w io.Writer, opt pairSt return io.Copy(w, rc) } -func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *Object, err error) { +func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *types.Object, err error) { rp := s.getAbsPath(path) var dirOutput *azfile.DirectoryGetPropertiesResponse @@ -195,7 +195,7 @@ func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o o.Path = path if opt.HasObjectMode && opt.ObjectMode.IsDir() { - o.Mode |= ModeDir + o.Mode |= types.ModeDir o.SetLastModified(dirOutput.LastModified()) @@ -209,7 +209,7 @@ func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o } o.SetSystemMetadata(sm) } else { - o.Mode |= ModeRead + o.Mode |= types.ModeRead o.SetContentLength(fileOutput.ContentLength()) o.SetLastModified(fileOutput.LastModified()) diff --git a/services/bos/service.go b/services/bos/service.go index 1f1d1dead..9f103091b 100644 --- a/services/bos/service.go +++ b/services/bos/service.go @@ -4,10 +4,10 @@ import ( "context" ps "go.beyondstorage.io/v5/pairs" - . "go.beyondstorage.io/v5/types" + "go.beyondstorage.io/v5/types" ) -func (s *Service) create(ctx context.Context, name string, opt pairServiceCreate) (store Storager, err error) { +func (s *Service) create(ctx context.Context, name string, opt pairServiceCreate) (store types.Storager, err error) { pairs := append(opt.pairs, ps.WithName(name)) st, err := s.newStorage(pairs...) @@ -32,7 +32,7 @@ func (s *Service) delete(ctx context.Context, name string, opt pairServiceDelete return nil } -func (s *Service) get(ctx context.Context, name string, opt pairServiceGet) (store Storager, err error) { +func (s *Service) get(ctx context.Context, name string, opt pairServiceGet) (store types.Storager, err error) { pairs := append(opt.pairs, ps.WithName(name)) st, err := s.newStorage(pairs...) @@ -43,13 +43,13 @@ func (s *Service) get(ctx context.Context, name string, opt pairServiceGet) (sto return st, nil } -func (s *Service) list(ctx context.Context, opt pairServiceList) (sti *StoragerIterator, err error) { +func (s *Service) list(ctx context.Context, opt pairServiceList) (sti *types.StoragerIterator, err error) { input := &storagePageStatus{} - return NewStoragerIterator(ctx, s.nextStoragePage, input), nil + return types.NewStoragerIterator(ctx, s.nextStoragePage, input), nil } -func (s *Service) nextStoragePage(ctx context.Context, page *StoragerPage) error { +func (s *Service) nextStoragePage(ctx context.Context, page *types.StoragerPage) error { output, err := s.service.ListBuckets() if err != nil { return err @@ -63,5 +63,5 @@ func (s *Service) nextStoragePage(ctx context.Context, page *StoragerPage) error page.Data = append(page.Data, store) } - return IterateDone + return types.IterateDone } diff --git a/services/bos/storage.go b/services/bos/storage.go index 327862d15..73d3976f2 100644 --- a/services/bos/storage.go +++ b/services/bos/storage.go @@ -12,10 +12,10 @@ import ( ps "go.beyondstorage.io/v5/pairs" "go.beyondstorage.io/v5/pkg/iowrap" "go.beyondstorage.io/v5/services" - . "go.beyondstorage.io/v5/types" + "go.beyondstorage.io/v5/types" ) -func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { +func (s *Storage) create(path string, opt pairStorageCreate) (o *types.Object) { rp := s.getAbsPath(path) if opt.HasObjectMode && opt.ObjectMode.IsDir() { @@ -25,10 +25,10 @@ func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { rp += "/" o = s.newObject(true) - o.Mode |= ModeDir + o.Mode |= types.ModeDir } else { o = s.newObject(false) - o.Mode |= ModeRead + o.Mode |= types.ModeRead } o.ID = rp o.Path = path @@ -63,7 +63,7 @@ func (s *Storage) delete(ctx context.Context, path string, opt pairStorageDelete return nil } -func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *ObjectIterator, err error) { +func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *types.ObjectIterator, err error) { input := &objectPageStatus{ maxKeys: 200, prefix: s.getAbsPath(path), @@ -72,10 +72,10 @@ func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (o if !opt.HasListMode { // Support `ListModePrefix` as the default `ListMode`. // ref: [GSP-46](https://github.com/beyondstorage/go-storage/blob/master/docs/rfcs/654-unify-list-behavior.md) - opt.ListMode = ListModePrefix + opt.ListMode = types.ListModePrefix } - var nextFn NextObjectFunc + var nextFn types.NextObjectFunc switch { case opt.ListMode.IsDir(): @@ -87,17 +87,17 @@ func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (o return nil, services.ListModeInvalidError{Actual: opt.ListMode} } - return NewObjectIterator(ctx, nextFn, input), nil + return types.NewObjectIterator(ctx, nextFn, input), nil } -func (s *Storage) metadata(opt pairStorageMetadata) (meta *StorageMeta) { - meta = NewStorageMeta() +func (s *Storage) metadata(opt pairStorageMetadata) (meta *types.StorageMeta) { + meta = types.NewStorageMeta() meta.Name = s.bucket meta.WorkDir = s.workDir return meta } -func (s *Storage) nextObjectPageByDir(ctx context.Context, page *ObjectPage) error { +func (s *Storage) nextObjectPageByDir(ctx context.Context, page *types.ObjectPage) error { input := page.Status.(*objectPageStatus) listArgs := &api.ListObjectsArgs{ @@ -116,7 +116,7 @@ func (s *Storage) nextObjectPageByDir(ctx context.Context, page *ObjectPage) err o := s.newObject(true) o.ID = v.Prefix o.Path = s.getRelPath(v.Prefix) - o.Mode |= ModeDir + o.Mode |= types.ModeDir page.Data = append(page.Data, o) } @@ -131,10 +131,10 @@ func (s *Storage) nextObjectPageByDir(ctx context.Context, page *ObjectPage) err } if output.NextMarker == "" { - return IterateDone + return types.IterateDone } if !output.IsTruncated { - return IterateDone + return types.IterateDone } input.marker = output.NextMarker @@ -142,7 +142,7 @@ func (s *Storage) nextObjectPageByDir(ctx context.Context, page *ObjectPage) err return nil } -func (s *Storage) nextObjectPageByPrefix(ctx context.Context, page *ObjectPage) error { +func (s *Storage) nextObjectPageByPrefix(ctx context.Context, page *types.ObjectPage) error { input := page.Status.(*objectPageStatus) listArgs := &api.ListObjectsArgs{ @@ -167,10 +167,10 @@ func (s *Storage) nextObjectPageByPrefix(ctx context.Context, page *ObjectPage) } if output.NextMarker == "" { - return IterateDone + return types.IterateDone } if !output.IsTruncated { - return IterateDone + return types.IterateDone } input.marker = output.NextMarker @@ -204,7 +204,7 @@ func (s *Storage) read(ctx context.Context, path string, w io.Writer, opt pairSt return io.Copy(w, rc) } -func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *Object, err error) { +func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *types.Object, err error) { rp := s.getAbsPath(path) if opt.HasObjectMode && opt.ObjectMode.IsDir() { @@ -226,9 +226,9 @@ func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o o.Path = path if opt.HasObjectMode && opt.ObjectMode.IsDir() { - o.Mode |= ModeDir + o.Mode |= types.ModeDir } else { - o.Mode |= ModeRead + o.Mode |= types.ModeRead } o.SetContentLength(output.ContentLength) diff --git a/services/cephfs/storage.go b/services/cephfs/storage.go index c1f3b5fd1..b5fb10890 100644 --- a/services/cephfs/storage.go +++ b/services/cephfs/storage.go @@ -4,10 +4,10 @@ import ( "context" "io" - . "go.beyondstorage.io/v5/types" + "go.beyondstorage.io/v5/types" ) -func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { +func (s *Storage) create(path string, opt pairStorageCreate) (o *types.Object) { panic("not implemented") } @@ -15,11 +15,11 @@ func (s *Storage) delete(ctx context.Context, path string, opt pairStorageDelete panic("not implemented") } -func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *ObjectIterator, err error) { +func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *types.ObjectIterator, err error) { panic("not implemented") } -func (s *Storage) metadata(opt pairStorageMetadata) (meta *StorageMeta) { +func (s *Storage) metadata(opt pairStorageMetadata) (meta *types.StorageMeta) { panic("not implemented") } @@ -27,7 +27,7 @@ func (s *Storage) read(ctx context.Context, path string, w io.Writer, opt pairSt panic("not implemented") } -func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *Object, err error) { +func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *types.Object, err error) { panic("not implemented") } diff --git a/services/cos/storage.go b/services/cos/storage.go index 3aa17d179..6aaef8b35 100644 --- a/services/cos/storage.go +++ b/services/cos/storage.go @@ -14,10 +14,10 @@ import ( "go.beyondstorage.io/v5/pkg/headers" "go.beyondstorage.io/v5/pkg/iowrap" "go.beyondstorage.io/v5/services" - . "go.beyondstorage.io/v5/types" + "go.beyondstorage.io/v5/types" ) -func (s *Storage) completeMultipart(ctx context.Context, o *Object, parts []*Part, opt pairStorageCompleteMultipart) (err error) { +func (s *Storage) completeMultipart(ctx context.Context, o *types.Object, parts []*types.Part, opt pairStorageCompleteMultipart) (err error) { // Users should make sure the numbers of the uploaded parts are continuous and sorted in ascending order. // ref: https://intl.cloud.tencent.com/document/product/436/7742 upload := &cos.CompleteMultipartUploadOptions{} @@ -35,18 +35,18 @@ func (s *Storage) completeMultipart(ctx context.Context, o *Object, parts []*Par return } - o.Mode.Del(ModePart) - o.Mode.Add(ModeRead) + o.Mode.Del(types.ModePart) + o.Mode.Add(types.ModeRead) return } -func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { +func (s *Storage) create(path string, opt pairStorageCreate) (o *types.Object) { rp := s.getAbsPath(path) // Handle create multipart object separately. if opt.HasMultipartID { o = s.newObject(true) - o.Mode = ModePart + o.Mode = types.ModePart o.SetMultipartID(opt.MultipartID) } else { if opt.HasObjectMode && opt.ObjectMode.IsDir() { @@ -56,10 +56,10 @@ func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { rp += "/" o = s.newObject(true) - o.Mode = ModeDir + o.Mode = types.ModeDir } else { o = s.newObject(false) - o.Mode = ModeRead + o.Mode = types.ModeRead } } @@ -68,9 +68,9 @@ func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { return o } -func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCreateDir) (o *Object, err error) { +func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCreateDir) (o *types.Object, err error) { if !s.features.VirtualDir { - err = NewOperationNotImplementedError("create_dir") + err = types.NewOperationNotImplementedError("create_dir") return } @@ -97,11 +97,11 @@ func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCre o = s.newObject(true) o.ID = rp o.Path = path - o.Mode |= ModeDir + o.Mode |= types.ModeDir return } -func (s *Storage) createMultipart(ctx context.Context, path string, opt pairStorageCreateMultipart) (o *Object, err error) { +func (s *Storage) createMultipart(ctx context.Context, path string, opt pairStorageCreateMultipart) (o *types.Object, err error) { rp := s.getAbsPath(path) input := &cos.InitiateMultipartUploadOptions{} @@ -141,7 +141,7 @@ func (s *Storage) createMultipart(ctx context.Context, path string, opt pairStor o = s.newObject(true) o.ID = rp o.Path = path - o.Mode |= ModePart + o.Mode |= types.ModePart o.SetMultipartID(output.UploadID) return o, nil } @@ -184,7 +184,7 @@ func (s *Storage) delete(ctx context.Context, path string, opt pairStorageDelete return nil } -func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *ObjectIterator, err error) { +func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *types.ObjectIterator, err error) { input := &objectPageStatus{ maxKeys: 200, prefix: s.getAbsPath(path), @@ -193,10 +193,10 @@ func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (o if !opt.HasListMode { // Support `ListModePrefix` as the default `ListMode`. // ref: [GSP-46](https://github.com/beyondstorage/go-storage/blob/master/docs/rfcs/654-unify-list-behavior.md) - opt.ListMode = ListModePrefix + opt.ListMode = types.ListModePrefix } - var nextFn NextObjectFunc + var nextFn types.NextObjectFunc switch { case opt.ListMode.IsPart(): @@ -210,21 +210,21 @@ func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (o return nil, services.ListModeInvalidError{Actual: opt.ListMode} } - return NewObjectIterator(ctx, nextFn, input), nil + return types.NewObjectIterator(ctx, nextFn, input), nil } -func (s *Storage) listMultipart(ctx context.Context, o *Object, opt pairStorageListMultipart) (pi *PartIterator, err error) { +func (s *Storage) listMultipart(ctx context.Context, o *types.Object, opt pairStorageListMultipart) (pi *types.PartIterator, err error) { input := &partPageStatus{ maxParts: "200", key: o.ID, uploadId: o.MustGetMultipartID(), } - return NewPartIterator(ctx, s.nextPartPage, input), nil + return types.NewPartIterator(ctx, s.nextPartPage, input), nil } -func (s *Storage) metadata(opt pairStorageMetadata) (meta *StorageMeta) { - meta = NewStorageMeta() +func (s *Storage) metadata(opt pairStorageMetadata) (meta *types.StorageMeta) { + meta = types.NewStorageMeta() meta.Name = s.name meta.WorkDir = s.workDir // set write restriction @@ -236,7 +236,7 @@ func (s *Storage) metadata(opt pairStorageMetadata) (meta *StorageMeta) { return } -func (s *Storage) nextObjectPageByDir(ctx context.Context, page *ObjectPage) error { +func (s *Storage) nextObjectPageByDir(ctx context.Context, page *types.ObjectPage) error { input := page.Status.(*objectPageStatus) output, _, err := s.bucket.Get(ctx, &cos.BucketGetOptions{ @@ -253,7 +253,7 @@ func (s *Storage) nextObjectPageByDir(ctx context.Context, page *ObjectPage) err o := s.newObject(true) o.ID = v o.Path = s.getRelPath(v) - o.Mode |= ModeDir + o.Mode |= types.ModeDir page.Data = append(page.Data, o) } @@ -268,14 +268,14 @@ func (s *Storage) nextObjectPageByDir(ctx context.Context, page *ObjectPage) err } if !output.IsTruncated { - return IterateDone + return types.IterateDone } input.keyMarker = output.NextMarker return nil } -func (s *Storage) nextObjectPageByPrefix(ctx context.Context, page *ObjectPage) error { +func (s *Storage) nextObjectPageByPrefix(ctx context.Context, page *types.ObjectPage) error { input := page.Status.(*objectPageStatus) output, _, err := s.bucket.Get(ctx, &cos.BucketGetOptions{ @@ -297,14 +297,14 @@ func (s *Storage) nextObjectPageByPrefix(ctx context.Context, page *ObjectPage) } if !output.IsTruncated { - return IterateDone + return types.IterateDone } input.keyMarker = output.NextMarker return nil } -func (s *Storage) nextPartObjectPageByPrefix(ctx context.Context, page *ObjectPage) error { +func (s *Storage) nextPartObjectPageByPrefix(ctx context.Context, page *types.ObjectPage) error { input := page.Status.(*objectPageStatus) listInput := &cos.ListMultipartUploadsOptions{ @@ -323,14 +323,14 @@ func (s *Storage) nextPartObjectPageByPrefix(ctx context.Context, page *ObjectPa o := s.newObject(true) o.ID = v.Key o.Path = s.getRelPath(v.Key) - o.Mode |= ModePart + o.Mode |= types.ModePart o.SetMultipartID(v.UploadID) page.Data = append(page.Data, o) } if !output.IsTruncated { - return IterateDone + return types.IterateDone } input.uploadIdMarker = output.NextUploadIDMarker @@ -338,7 +338,7 @@ func (s *Storage) nextPartObjectPageByPrefix(ctx context.Context, page *ObjectPa return nil } -func (s *Storage) nextPartPage(ctx context.Context, page *PartPage) error { +func (s *Storage) nextPartPage(ctx context.Context, page *types.PartPage) error { input := page.Status.(*partPageStatus) output, _, err := s.object.ListParts(ctx, input.key, input.uploadId, &cos.ObjectListPartsOptions{ @@ -350,7 +350,7 @@ func (s *Storage) nextPartPage(ctx context.Context, page *PartPage) error { } for _, v := range output.Parts { - p := &Part{ + p := &types.Part{ // The returned `PartNumber` is [1, 10000]. // Set Index=*v.PartNumber-1 here to make the `PartNumber` zero-based for user. Index: v.PartNumber - 1, @@ -362,7 +362,7 @@ func (s *Storage) nextPartPage(ctx context.Context, page *PartPage) error { } if !output.IsTruncated { - return IterateDone + return types.IterateDone } input.partNumberMarker = output.NextPartNumberMarker @@ -410,7 +410,7 @@ func (s *Storage) read(ctx context.Context, path string, w io.Writer, opt pairSt return io.Copy(w, rc) } -func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *Object, err error) { +func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *types.Object, err error) { rp := s.getAbsPath(path) if opt.HasMultipartID { @@ -422,7 +422,7 @@ func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o o = s.newObject(true) o.ID = rp o.Path = path - o.Mode |= ModePart + o.Mode |= types.ModePart o.SetMultipartID(opt.MultipartID) return o, nil } @@ -453,9 +453,9 @@ func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o o.ID = rp o.Path = path if opt.HasObjectMode && opt.ObjectMode.IsDir() { - o.Mode |= ModeDir + o.Mode |= types.ModeDir } else { - o.Mode |= ModeRead + o.Mode |= types.ModeRead } o.SetContentLength(output.ContentLength) @@ -563,7 +563,7 @@ func (s *Storage) write(ctx context.Context, path string, r io.Reader, size int6 return } -func (s *Storage) writeMultipart(ctx context.Context, o *Object, r io.Reader, size int64, index int, opt pairStorageWriteMultipart) (n int64, part *Part, err error) { +func (s *Storage) writeMultipart(ctx context.Context, o *types.Object, r io.Reader, size int64, index int, opt pairStorageWriteMultipart) (n int64, part *types.Part, err error) { if size > multipartSizeMaximum { err = fmt.Errorf("size limit exceeded: %w", services.ErrRestrictionDissatisfied) return @@ -588,7 +588,7 @@ func (s *Storage) writeMultipart(ctx context.Context, o *Object, r io.Reader, si return } - part = &Part{ + part = &types.Part{ Index: index, Size: size, ETag: output.Header.Get("ETag"), diff --git a/services/dropbox/storage.go b/services/dropbox/storage.go index 8b34be091..7bfc99803 100644 --- a/services/dropbox/storage.go +++ b/services/dropbox/storage.go @@ -10,10 +10,10 @@ import ( "go.beyondstorage.io/v5/pkg/iowrap" "go.beyondstorage.io/v5/services" - . "go.beyondstorage.io/v5/types" + "go.beyondstorage.io/v5/types" ) -func (s *Storage) commitAppend(ctx context.Context, o *Object, opt pairStorageCommitAppend) (err error) { +func (s *Storage) commitAppend(ctx context.Context, o *types.Object, opt pairStorageCommitAppend) (err error) { rp := o.GetID() offset, _ := o.GetAppendOffset() @@ -44,21 +44,21 @@ func (s *Storage) commitAppend(ctx context.Context, o *Object, opt pairStorageCo return } - o.Mode &= ^ModeAppend + o.Mode &= ^types.ModeAppend if fileMetadata != nil && fileMetadata.IsDownloadable { - o.Mode |= ModeRead + o.Mode |= types.ModeRead } return nil } -func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { +func (s *Storage) create(path string, opt pairStorageCreate) (o *types.Object) { if opt.HasObjectMode && opt.ObjectMode.IsDir() { o = s.newObject(true) - o.Mode = ModeDir + o.Mode = types.ModeDir } else { o = s.newObject(false) - o.Mode = ModeRead + o.Mode = types.ModeRead } o.ID = s.getAbsPath(path) @@ -66,7 +66,7 @@ func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { return o } -func (s *Storage) createAppend(ctx context.Context, path string, opt pairStorageCreateAppend) (o *Object, err error) { +func (s *Storage) createAppend(ctx context.Context, path string, opt pairStorageCreateAppend) (o *types.Object, err error) { startArg := &files.UploadSessionStartArg{ Close: false, SessionType: &files.UploadSessionType{ @@ -86,7 +86,7 @@ func (s *Storage) createAppend(ctx context.Context, path string, opt pairStorage } o = s.newObject(true) - o.Mode = ModeAppend + o.Mode = types.ModeAppend o.ID = s.getAbsPath(path) o.Path = path o.SetAppendOffset(0) @@ -94,7 +94,7 @@ func (s *Storage) createAppend(ctx context.Context, path string, opt pairStorage return o, nil } -func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCreateDir) (o *Object, err error) { +func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCreateDir) (o *types.Object, err error) { rp := s.getAbsPath(path) res, err := s.client.CreateFolderV2(&files.CreateFolderArg{ @@ -111,13 +111,13 @@ func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCre if res != nil { // A successful response indicates that the folder is created and the returned `res` is the corresponding `FolderMetadata`. o = s.newObject(true) - o.Mode = ModeDir + o.Mode = types.ModeDir o.ID = res.Metadata.Id o.Path = path } else { // `res` is nil when the given path is an existing folder. o = s.newObject(false) - o.Mode = ModeDir + o.Mode = types.ModeDir o.ID = rp o.Path = path } @@ -147,7 +147,7 @@ func (s *Storage) delete(ctx context.Context, path string, opt pairStorageDelete return nil } -func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *ObjectIterator, err error) { +func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *types.ObjectIterator, err error) { input := &objectPageStatus{ limit: 200, path: s.getAbsPath(path), @@ -157,11 +157,11 @@ func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (o input.recursive = true } - return NewObjectIterator(ctx, s.nextObjectPage, input), nil + return types.NewObjectIterator(ctx, s.nextObjectPage, input), nil } -func (s *Storage) metadata(opt pairStorageMetadata) (meta *StorageMeta) { - meta = NewStorageMeta() +func (s *Storage) metadata(opt pairStorageMetadata) (meta *types.StorageMeta) { + meta = types.NewStorageMeta() meta.WorkDir = s.workDir meta.Name = "" // set write restriction @@ -171,7 +171,7 @@ func (s *Storage) metadata(opt pairStorageMetadata) (meta *StorageMeta) { return } -func (s *Storage) nextObjectPage(ctx context.Context, page *ObjectPage) error { +func (s *Storage) nextObjectPage(ctx context.Context, page *types.ObjectPage) error { input := page.Status.(*objectPageStatus) var err error @@ -191,7 +191,7 @@ func (s *Storage) nextObjectPage(ctx context.Context, page *ObjectPage) error { } for _, v := range output.Entries { - var o *Object + var o *types.Object switch meta := v.(type) { case *files.FolderMetadata: o = s.formatFolderObject(meta.Name, meta) @@ -203,7 +203,7 @@ func (s *Storage) nextObjectPage(ctx context.Context, page *ObjectPage) error { } if !output.HasMore { - return IterateDone + return types.IterateDone } input.cursor = output.Cursor @@ -238,7 +238,7 @@ func (s *Storage) read(ctx context.Context, path string, w io.Writer, opt pairSt return io.Copy(w, rc) } -func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *Object, err error) { +func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *types.Object, err error) { rp := s.getAbsPath(path) input := &files.GetMetadataArg{ @@ -297,7 +297,7 @@ func (s *Storage) write(ctx context.Context, path string, r io.Reader, size int6 return size, nil } -func (s *Storage) writeAppend(ctx context.Context, o *Object, r io.Reader, size int64, opt pairStorageWriteAppend) (n int64, err error) { +func (s *Storage) writeAppend(ctx context.Context, o *types.Object, r io.Reader, size int64, opt pairStorageWriteAppend) (n int64, err error) { sessionId := GetObjectSystemMetadata(o).UploadSessionID offset := o.MustGetAppendOffset() diff --git a/services/example/storage.go b/services/example/storage.go index d112476b4..c4f051361 100644 --- a/services/example/storage.go +++ b/services/example/storage.go @@ -4,10 +4,10 @@ import ( "context" "io" - . "go.beyondstorage.io/v5/types" + "go.beyondstorage.io/v5/types" ) -func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { +func (s *Storage) create(path string, opt pairStorageCreate) (o *types.Object) { panic("not implemented") } @@ -15,11 +15,11 @@ func (s *Storage) delete(ctx context.Context, path string, opt pairStorageDelete panic("not implemented") } -func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *ObjectIterator, err error) { +func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *types.ObjectIterator, err error) { panic("not implemented") } -func (s *Storage) metadata(opt pairStorageMetadata) (meta *StorageMeta) { +func (s *Storage) metadata(opt pairStorageMetadata) (meta *types.StorageMeta) { panic("not implemented") } @@ -27,7 +27,7 @@ func (s *Storage) read(ctx context.Context, path string, w io.Writer, opt pairSt panic("not implemented") } -func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *Object, err error) { +func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *types.Object, err error) { panic("not implemented") } diff --git a/services/fs/storage.go b/services/fs/storage.go index cb78480d0..c83e4f20b 100644 --- a/services/fs/storage.go +++ b/services/fs/storage.go @@ -13,7 +13,7 @@ import ( "go.beyondstorage.io/v5/pkg/iowrap" "go.beyondstorage.io/v5/services" - . "go.beyondstorage.io/v5/types" + "go.beyondstorage.io/v5/types" ) func (s *Storage) delete(ctx context.Context, path string, opt pairStorageDelete) (err error) { @@ -48,7 +48,7 @@ func (input *listDirInput) ContinuationToken() string { return input.continuationToken } -func (s *Storage) commitAppend(ctx context.Context, o *Object, opt pairStorageCommitAppend) (err error) { +func (s *Storage) commitAppend(ctx context.Context, o *types.Object, opt pairStorageCommitAppend) (err error) { return } @@ -79,13 +79,13 @@ func (s *Storage) copy(ctx context.Context, src string, dst string, opt pairStor return } -func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { +func (s *Storage) create(path string, opt pairStorageCreate) (o *types.Object) { if opt.HasObjectMode && opt.ObjectMode.IsDir() { o = s.newObject(false) - o.Mode = ModeDir + o.Mode = types.ModeDir } else { o = s.newObject(false) - o.Mode = ModeRead + o.Mode = types.ModeRead } o.ID = filepath.Join(s.workDir, path) @@ -93,7 +93,7 @@ func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { return o } -func (s *Storage) createAppend(ctx context.Context, path string, opt pairStorageCreateAppend) (o *Object, err error) { +func (s *Storage) createAppend(ctx context.Context, path string, opt pairStorageCreateAppend) (o *types.Object, err error) { rp := s.getAbsPath(path) f, needClose, err := s.createFile(rp) @@ -110,13 +110,13 @@ func (s *Storage) createAppend(ctx context.Context, path string, opt pairStorage o = s.newObject(true) o.ID = rp o.Path = path - o.Mode = ModeRead | ModeAppend + o.Mode = types.ModeRead | types.ModeAppend o.SetAppendOffset(0) return o, nil } -func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCreateDir) (o *Object, err error) { +func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCreateDir) (o *types.Object, err error) { rp := s.getAbsPath(path) err = os.MkdirAll(rp, 0755) @@ -127,11 +127,11 @@ func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCre o = s.newObject(true) o.ID = rp o.Path = path - o.Mode |= ModeDir + o.Mode |= types.ModeDir return } -func (s *Storage) createLink(ctx context.Context, path string, target string, opt pairStorageCreateLink) (o *Object, err error) { +func (s *Storage) createLink(ctx context.Context, path string, target string, opt pairStorageCreateLink) (o *types.Object, err error) { rt := s.getAbsPath(target) rp := s.getAbsPath(path) @@ -170,7 +170,7 @@ func (s *Storage) createLink(ctx context.Context, path string, target string, op o.Path = path o.SetLinkTarget(rt) - o.Mode |= ModeLink + o.Mode |= types.ModeLink err = os.Symlink(rt, rp) if err != nil { @@ -210,7 +210,7 @@ func (s *Storage) fetch(ctx context.Context, path string, url string, opt pairSt return nil } -func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *ObjectIterator, err error) { +func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *types.ObjectIterator, err error) { buf := make([]byte, 8192) input := listDirInput{ @@ -227,11 +227,11 @@ func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (o buf: &buf, } - return NewObjectIterator(ctx, s.listDirNext, &input), nil + return types.NewObjectIterator(ctx, s.listDirNext, &input), nil } -func (s *Storage) metadata(opt pairStorageMetadata) (meta *StorageMeta) { - meta = NewStorageMeta() +func (s *Storage) metadata(opt pairStorageMetadata) (meta *types.StorageMeta) { + meta = types.NewStorageMeta() meta.WorkDir = s.workDir return meta } @@ -307,7 +307,7 @@ func (s *Storage) read(ctx context.Context, path string, w io.Writer, opt pairSt return io.Copy(w, rc) } -func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *Object, err error) { +func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *types.Object, err error) { rp := s.getAbsPath(path) fi, err := s.statFile(rp) @@ -320,12 +320,12 @@ func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o o.Path = path if fi.IsDir() { - o.Mode |= ModeDir + o.Mode |= types.ModeDir return } if fi.Mode().IsRegular() { - o.Mode |= ModeRead | ModePage | ModeAppend + o.Mode |= types.ModeRead | types.ModePage | types.ModeAppend o.SetContentLength(fi.Size()) o.SetLastModified(fi.ModTime()) @@ -337,7 +337,7 @@ func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o // Check if this file is a link. if fi.Mode()&os.ModeSymlink != 0 { - o.Mode |= ModeLink + o.Mode |= types.ModeLink target, err := evalSymlinks(rp) if err != nil { @@ -375,7 +375,7 @@ func (s *Storage) write(ctx context.Context, path string, r io.Reader, size int6 return io.CopyN(f, r, size) } -func (s *Storage) writeAppend(ctx context.Context, o *Object, r io.Reader, size int64, opt pairStorageWriteAppend) (n int64, err error) { +func (s *Storage) writeAppend(ctx context.Context, o *types.Object, r io.Reader, size int64, opt pairStorageWriteAppend) (n int64, err error) { f, needClose, err := s.createFileWithFlag(o.ID, os.O_RDWR|os.O_CREATE|os.O_APPEND) if err != nil { return diff --git a/services/ftp/storage.go b/services/ftp/storage.go index d4c5b428a..8bd8f54a9 100644 --- a/services/ftp/storage.go +++ b/services/ftp/storage.go @@ -4,14 +4,16 @@ import ( "bytes" "context" "errors" + "io" + "net/textproto" + "path/filepath" + "github.com/jlaffaye/ftp" mime "github.com/qingstor/go-mime" + "go.beyondstorage.io/v5/pkg/iowrap" "go.beyondstorage.io/v5/services" - . "go.beyondstorage.io/v5/types" - "io" - "net/textproto" - "path/filepath" + "go.beyondstorage.io/v5/types" ) type listDirInput struct { @@ -27,13 +29,13 @@ func (input *listDirInput) ContinuationToken() string { return input.continuationToken } -func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { +func (s *Storage) create(path string, opt pairStorageCreate) (o *types.Object) { if opt.HasObjectMode && opt.ObjectMode.IsDir() { o = s.newObject(false) - o.Mode = ModeDir + o.Mode = types.ModeDir } else { o = s.newObject(false) - o.Mode = ModeRead + o.Mode = types.ModeRead } path = filepath.ToSlash(path) o.ID = filepath.Join(s.workDir, path) @@ -41,7 +43,7 @@ func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { return o } -func (s *Storage) createDir(ctx context.Context, path string) (o *Object, err error) { +func (s *Storage) createDir(ctx context.Context, path string) (o *types.Object, err error) { rp := s.getAbsPath(path) err = s.connection.MakeDir(rp) if err != nil { @@ -50,7 +52,7 @@ func (s *Storage) createDir(ctx context.Context, path string) (o *Object, err er o = s.newObject(true) o.ID = rp o.Path = path - o.Mode |= ModeDir + o.Mode |= types.ModeDir return } @@ -68,7 +70,7 @@ func (s *Storage) delete(ctx context.Context, path string, opt pairStorageDelete return nil } -func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *ObjectIterator, err error) { +func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *types.ObjectIterator, err error) { if !opt.HasListMode || opt.ListMode.IsDir() { input := listDirInput{ // Always keep service original name as rp. @@ -81,14 +83,14 @@ func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (o continuationToken: opt.ContinuationToken, counter: 0, } - return NewObjectIterator(ctx, s.listDirNext, &input), nil + return types.NewObjectIterator(ctx, s.listDirNext, &input), nil } else { return nil, services.ListModeInvalidError{Actual: opt.ListMode} } } -func (s *Storage) metadata(opt pairStorageMetadata) (meta *StorageMeta) { - meta = NewStorageMeta() +func (s *Storage) metadata(opt pairStorageMetadata) (meta *types.StorageMeta) { + meta = types.NewStorageMeta() meta.WorkDir = s.workDir return meta } @@ -122,7 +124,7 @@ func (s *Storage) read(ctx context.Context, path string, w io.Writer, opt pairSt return io.Copy(w, rc) } -func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *Object, err error) { +func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *types.Object, err error) { rp := s.getAbsPath(path) fl, err := s.connection.List(rp) if err != nil { @@ -149,17 +151,17 @@ func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o o.Path = path switch fe.Type { case ftp.EntryTypeFolder: - o.Mode |= ModeDir + o.Mode |= types.ModeDir return case ftp.EntryTypeLink: - o.Mode |= ModeLink + o.Mode |= types.ModeLink target := fe.Target if err != nil { return nil, err } o.SetLinkTarget(target) default: - o.Mode |= ModeRead | ModePage | ModeAppend + o.Mode |= types.ModeRead | types.ModePage | types.ModeAppend o.SetContentLength(int64(fe.Size)) o.SetLastModified(fe.Time) if v := mime.DetectFilePath(path); v != "" { diff --git a/services/gcs/storage.go b/services/gcs/storage.go index d3f050b34..359b5840d 100644 --- a/services/gcs/storage.go +++ b/services/gcs/storage.go @@ -13,10 +13,10 @@ import ( ps "go.beyondstorage.io/v5/pairs" "go.beyondstorage.io/v5/pkg/iowrap" "go.beyondstorage.io/v5/services" - . "go.beyondstorage.io/v5/types" + "go.beyondstorage.io/v5/types" ) -func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { +func (s *Storage) create(path string, opt pairStorageCreate) (o *types.Object) { rp := s.getAbsPath(path) if opt.HasObjectMode && opt.ObjectMode.IsDir() { if !s.features.VirtualDir { @@ -25,19 +25,19 @@ func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { // Add `/` at the end of path to simulate a directory. rp += "/" o = s.newObject(true) - o.Mode = ModeDir + o.Mode = types.ModeDir } else { o = s.newObject(false) - o.Mode = ModeRead + o.Mode = types.ModeRead } o.ID = rp o.Path = path return o } -func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCreateDir) (o *Object, err error) { +func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCreateDir) (o *types.Object, err error) { if !s.features.VirtualDir { - err = NewOperationNotImplementedError("create_dir") + err = types.NewOperationNotImplementedError("create_dir") return } rp := s.getAbsPath(path) @@ -57,7 +57,7 @@ func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCre o = s.newObject(true) o.ID = rp o.Path = path - o.Mode |= ModeDir + o.Mode |= types.ModeDir return } @@ -82,16 +82,16 @@ func (s *Storage) delete(ctx context.Context, path string, opt pairStorageDelete return nil } -func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *ObjectIterator, err error) { +func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *types.ObjectIterator, err error) { input := &objectPageStatus{ prefix: s.getAbsPath(path), } if !opt.HasListMode { // Support `ListModePrefix` as the default `ListMode`. // ref: [GSP-654](https://github.com/beyondstorage/go-storage/blob/master/docs/rfcs/654-unify-list-behavior.md) - opt.ListMode = ListModePrefix + opt.ListMode = types.ListModePrefix } - var nextFn NextObjectFunc + var nextFn types.NextObjectFunc switch { case opt.ListMode.IsDir(): input.delimiter = "/" @@ -101,17 +101,17 @@ func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (o default: return nil, services.ListModeInvalidError{Actual: opt.ListMode} } - return NewObjectIterator(ctx, nextFn, input), nil + return types.NewObjectIterator(ctx, nextFn, input), nil } -func (s *Storage) metadata(opt pairStorageMetadata) (meta *StorageMeta) { - meta = NewStorageMeta() +func (s *Storage) metadata(opt pairStorageMetadata) (meta *types.StorageMeta) { + meta = types.NewStorageMeta() meta.Name = s.name meta.WorkDir = s.workDir return } -func (s *Storage) nextObjectPageByDir(ctx context.Context, page *ObjectPage) error { +func (s *Storage) nextObjectPageByDir(ctx context.Context, page *types.ObjectPage) error { input := page.Status.(*objectPageStatus) it := s.bucket.Objects(ctx, &gs.Query{ Prefix: input.prefix, @@ -121,7 +121,7 @@ func (s *Storage) nextObjectPageByDir(ctx context.Context, page *ObjectPage) err for remaining > 0 { object, err := it.Next() if err == iterator.Done { - return IterateDone + return types.IterateDone } if err != nil { return err @@ -134,7 +134,7 @@ func (s *Storage) nextObjectPageByDir(ctx context.Context, page *ObjectPage) err o := s.newObject(true) o.ID = object.Prefix o.Path = s.getRelPath(object.Prefix) - o.Mode |= ModeDir + o.Mode |= types.ModeDir page.Data = append(page.Data, o) remaining -= 1 continue @@ -149,7 +149,7 @@ func (s *Storage) nextObjectPageByDir(ctx context.Context, page *ObjectPage) err return nil } -func (s *Storage) nextObjectPageByPrefix(ctx context.Context, page *ObjectPage) error { +func (s *Storage) nextObjectPageByPrefix(ctx context.Context, page *types.ObjectPage) error { input := page.Status.(*objectPageStatus) it := s.bucket.Objects(ctx, &gs.Query{ Prefix: input.prefix, @@ -158,7 +158,7 @@ func (s *Storage) nextObjectPageByPrefix(ctx context.Context, page *ObjectPage) for remaining > 0 { object, err := it.Next() if err == iterator.Done { - return IterateDone + return types.IterateDone } if err != nil { return err @@ -204,7 +204,7 @@ func (s *Storage) read(ctx context.Context, path string, w io.Writer, opt pairSt return io.Copy(w, rc) } -func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *Object, err error) { +func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *types.Object, err error) { rp := s.getAbsPath(path) if opt.HasObjectMode && opt.ObjectMode.IsDir() { if !s.features.VirtualDir { @@ -223,7 +223,7 @@ func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o } if opt.HasObjectMode && opt.ObjectMode.IsDir() { o.Path = path - o.Mode.Add(ModeDir) + o.Mode.Add(types.ModeDir) } return o, nil } diff --git a/services/gdrive/storage.go b/services/gdrive/storage.go index 953341065..b8e5bed18 100644 --- a/services/gdrive/storage.go +++ b/services/gdrive/storage.go @@ -11,7 +11,7 @@ import ( "go.beyondstorage.io/v5/pkg/iowrap" "go.beyondstorage.io/v5/services" - . "go.beyondstorage.io/v5/types" + "go.beyondstorage.io/v5/types" ) const directoryMimeType = "application/vnd.google-apps.folder" @@ -48,14 +48,14 @@ func (s *Storage) copy(ctx context.Context, src string, dst string, opt pairStor return nil } -func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { +func (s *Storage) create(path string, opt pairStorageCreate) (o *types.Object) { o = s.newObject(false) o.ID = s.getAbsPath(path) o.Path = path return o } -func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCreateDir) (o *Object, err error) { +func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCreateDir) (o *types.Object, err error) { _, err = s.createDirs(ctx, path) @@ -66,7 +66,7 @@ func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCre o = s.newObject(true) o.ID = s.getAbsPath(path) o.Path = path - o.Mode = ModeDir + o.Mode = types.ModeDir return o, nil @@ -111,21 +111,21 @@ func (s *Storage) delete(ctx context.Context, path string, opt pairStorageDelete return nil } -func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *ObjectIterator, err error) { +func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *types.ObjectIterator, err error) { input := &objectPageStatus{ limit: 200, path: s.getAbsPath(path), } if !opt.HasListMode || opt.ListMode.IsDir() { - return NewObjectIterator(ctx, s.nextObjectPage, input), nil + return types.NewObjectIterator(ctx, s.nextObjectPage, input), nil } else { return nil, services.ListModeInvalidError{Actual: opt.ListMode} } } -func (s *Storage) metadata(opt pairStorageMetadata) (meta *StorageMeta) { - meta = NewStorageMeta() +func (s *Storage) metadata(opt pairStorageMetadata) (meta *types.StorageMeta) { + meta = types.NewStorageMeta() meta.Name = s.name meta.WorkDir = s.workDir return meta @@ -157,7 +157,7 @@ func (s *Storage) mkDir(ctx context.Context, parents string, dirName string) (st return f.Id, nil } -func (s *Storage) nextObjectPage(ctx context.Context, page *ObjectPage) (err error) { +func (s *Storage) nextObjectPage(ctx context.Context, page *types.ObjectPage) (err error) { input := page.Status.(*objectPageStatus) var dirId string @@ -177,7 +177,7 @@ func (s *Storage) nextObjectPage(ctx context.Context, page *ObjectPage) (err err } if len(r.Files) == 0 { - return IterateDone + return types.IterateDone } for _, f := range r.Files { @@ -186,9 +186,9 @@ func (s *Storage) nextObjectPage(ctx context.Context, page *ObjectPage) (err err o.Path = f.Name switch f.MimeType { case directoryMimeType: - o.Mode = ModeDir + o.Mode = types.ModeDir default: - o.Mode = ModeRead + o.Mode = types.ModeRead } page.Data = append(page.Data, o) } @@ -285,7 +285,7 @@ func (s *Storage) searchContentInDir(ctx context.Context, dirId string, contentN } -func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *Object, err error) { +func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *types.Object, err error) { content, err := s.pathToId(ctx, path) @@ -306,7 +306,7 @@ func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o file, _ := s.service.Files.Get(content).Context(ctx).Fields("*").Do() if file.MimeType == directoryMimeType { - o.Mode |= ModeDir + o.Mode |= types.ModeDir } o.SetContentLength(file.Size) diff --git a/services/hdfs/storage.go b/services/hdfs/storage.go index 0f9825dd0..1a115d5a1 100644 --- a/services/hdfs/storage.go +++ b/services/hdfs/storage.go @@ -10,17 +10,17 @@ import ( "go.beyondstorage.io/v5/pkg/iowrap" "go.beyondstorage.io/v5/services" - . "go.beyondstorage.io/v5/types" + "go.beyondstorage.io/v5/types" ) -func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { +func (s *Storage) create(path string, opt pairStorageCreate) (o *types.Object) { rp := s.getAbsPath(path) if opt.ObjectMode.IsDir() && opt.HasObjectMode { o = s.newObject(false) - o.Mode = ModeDir + o.Mode = types.ModeDir } else { o = s.newObject(false) - o.Mode = ModeRead + o.Mode = types.ModeRead } o.ID = rp @@ -28,7 +28,7 @@ func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { return o } -func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCreateDir) (o *Object, err error) { +func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCreateDir) (o *types.Object, err error) { rp := s.getAbsPath(path) // If dirname is already a directory, @@ -43,7 +43,7 @@ func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCre o = s.newObject(true) o.ID = rp o.Path = path - o.Mode |= ModeDir + o.Mode |= types.ModeDir return o, err } @@ -59,20 +59,20 @@ func (s *Storage) delete(ctx context.Context, path string, opt pairStorageDelete return err } -func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *ObjectIterator, err error) { +func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *types.ObjectIterator, err error) { if !opt.HasListMode || opt.ListMode.IsDir() { input := &listDirInput{ rp: s.getAbsPath(path), continuationToken: opt.ContinuationToken, } - return NewObjectIterator(ctx, s.listDirNext, input), nil + return types.NewObjectIterator(ctx, s.listDirNext, input), nil } else { return nil, services.ListModeInvalidError{Actual: opt.ListMode} } } -func (s *Storage) metadata(opt pairStorageMetadata) (meta *StorageMeta) { - meta = NewStorageMeta() +func (s *Storage) metadata(opt pairStorageMetadata) (meta *types.StorageMeta) { + meta = types.NewStorageMeta() meta.WorkDir = s.workDir return meta } @@ -125,7 +125,7 @@ func (s *Storage) read(ctx context.Context, path string, w io.Writer, opt pairSt return io.Copy(w, rc) } -func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *Object, err error) { +func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *types.Object, err error) { rp := s.getAbsPath(path) stat, err := s.hdfs.Stat(rp) @@ -138,12 +138,12 @@ func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o o.Path = path if stat.IsDir() { - o.Mode |= ModeDir + o.Mode |= types.ModeDir return } if stat.Mode().IsRegular() { - o.Mode |= ModeRead + o.Mode |= types.ModeRead o.SetContentLength(stat.Size()) o.SetLastModified(stat.ModTime()) } diff --git a/services/hdfs/utils.go b/services/hdfs/utils.go index 3cca169cb..25e01aa02 100644 --- a/services/hdfs/utils.go +++ b/services/hdfs/utils.go @@ -7,12 +7,12 @@ import ( "path" "path/filepath" + "github.com/colinmarc/hdfs/v2" + "go.beyondstorage.io/endpoint" ps "go.beyondstorage.io/v5/pairs" "go.beyondstorage.io/v5/services" "go.beyondstorage.io/v5/types" - - "github.com/colinmarc/hdfs/v2" ) // Storage is the example client. diff --git a/services/ipfs/storage.go b/services/ipfs/storage.go index afb22713e..19223e1e5 100644 --- a/services/ipfs/storage.go +++ b/services/ipfs/storage.go @@ -12,7 +12,7 @@ import ( "go.beyondstorage.io/v5/pkg/iowrap" "go.beyondstorage.io/v5/services" - . "go.beyondstorage.io/v5/types" + "go.beyondstorage.io/v5/types" ) // The src of `ipfs files cp` supports both `IPFS-path` and `MFS-path` @@ -37,30 +37,30 @@ func (s *Storage) copy(ctx context.Context, src string, dst string, opt pairStor return s.ipfs.FilesCp(ctx, s.getAbsPath(src), dst) } -func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { +func (s *Storage) create(path string, opt pairStorageCreate) (o *types.Object) { if opt.HasObjectMode && opt.ObjectMode.IsDir() { path += "/" - o = NewObject(s, true) - o.Mode = ModeDir + o = types.NewObject(s, true) + o.Mode = types.ModeDir } else { - o = NewObject(s, false) - o.Mode = ModeRead + o = types.NewObject(s, false) + o.Mode = types.ModeRead } o.ID = s.getAbsPath(path) o.Path = path return o } -func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCreateDir) (o *Object, err error) { +func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCreateDir) (o *types.Object, err error) { path = s.getAbsPath(path) err = s.ipfs.FilesMkdir(ctx, path, ipfs.FilesMkdir.Parents(true)) if err != nil { return nil, err } - o = NewObject(s, true) + o = types.NewObject(s, true) o.ID = path o.Path = path - o.Mode = ModeDir + o.Mode = types.ModeDir return } @@ -71,38 +71,38 @@ func (s *Storage) delete(ctx context.Context, path string, opt pairStorageDelete return } -func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *ObjectIterator, err error) { +func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *types.ObjectIterator, err error) { rp := s.getAbsPath(path) if !opt.HasListMode || opt.ListMode.IsDir() { - nextFn := func(ctx context.Context, page *ObjectPage) error { + nextFn := func(ctx context.Context, page *types.ObjectPage) error { dir, err := s.ipfs.FilesLs(ctx, rp, ipfs.FilesLs.Stat(true)) if err != nil { return err } for _, f := range dir { - o := NewObject(s, true) + o := types.NewObject(s, true) o.ID = f.Hash o.Path = f.Name switch f.Type { case ipfs.TFile: - o.Mode |= ModeRead + o.Mode |= types.ModeRead case ipfs.TDirectory: - o.Mode |= ModeDir + o.Mode |= types.ModeDir } o.SetContentLength(int64(f.Size)) page.Data = append(page.Data, o) } - return IterateDone + return types.IterateDone } - oi = NewObjectIterator(ctx, nextFn, nil) + oi = types.NewObjectIterator(ctx, nextFn, nil) return } else { return nil, services.ListModeInvalidError{Actual: opt.ListMode} } } -func (s *Storage) metadata(opt pairStorageMetadata) (meta *StorageMeta) { - meta = NewStorageMeta() +func (s *Storage) metadata(opt pairStorageMetadata) (meta *types.StorageMeta) { + meta = types.NewStorageMeta() meta.WorkDir = s.workDir return meta } @@ -159,19 +159,19 @@ func (s *Storage) read(ctx context.Context, path string, w io.Writer, opt pairSt return io.Copy(w, f) } -func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *Object, err error) { +func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *types.Object, err error) { rp := s.getAbsPath(path) stat, err := s.ipfs.FilesStat(ctx, rp, ipfs.FilesStat.WithLocal(true)) if err != nil { return nil, err } - o = NewObject(s, true) + o = types.NewObject(s, true) o.ID = stat.Hash o.Path = path if opt.HasObjectMode && opt.ObjectMode.IsDir() { - o.Mode |= ModeDir + o.Mode |= types.ModeDir } else { - o.Mode |= ModeRead + o.Mode |= types.ModeRead } o.SetContentType(stat.Type) o.SetContentLength(int64(stat.Size)) diff --git a/services/kodo/storage.go b/services/kodo/storage.go index a485a2615..4ddeb660e 100644 --- a/services/kodo/storage.go +++ b/services/kodo/storage.go @@ -13,10 +13,10 @@ import ( ps "go.beyondstorage.io/v5/pairs" "go.beyondstorage.io/v5/pkg/iowrap" "go.beyondstorage.io/v5/services" - . "go.beyondstorage.io/v5/types" + "go.beyondstorage.io/v5/types" ) -func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { +func (s *Storage) create(path string, opt pairStorageCreate) (o *types.Object) { rp := s.getAbsPath(path) if opt.HasObjectMode && opt.ObjectMode.IsDir() { @@ -25,10 +25,10 @@ func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { } rp += "/" o = s.newObject(true) - o.Mode = ModeDir + o.Mode = types.ModeDir } else { o = s.newObject(false) - o.Mode = ModeRead + o.Mode = types.ModeRead } o.ID = rp @@ -36,9 +36,9 @@ func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { return o } -func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCreateDir) (o *Object, err error) { +func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCreateDir) (o *types.Object, err error) { if !s.features.VirtualDir { - err = NewOperationNotImplementedError("create_dir") + err = types.NewOperationNotImplementedError("create_dir") return } @@ -78,7 +78,7 @@ func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCre o.Path = path o.ID = rp - o.Mode = ModeDir + o.Mode = types.ModeDir return } @@ -109,7 +109,7 @@ func (s *Storage) delete(ctx context.Context, path string, opt pairStorageDelete return nil } -func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *ObjectIterator, err error) { +func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *types.ObjectIterator, err error) { input := &objectPageStatus{ limit: 1000, prefix: s.getAbsPath(path), @@ -118,10 +118,10 @@ func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (o if !opt.HasListMode { // Support `ListModePrefix` as the default `ListMode`. // ref: [GSP-654](https://github.com/beyondstorage/go-storage/blob/master/docs/rfcs/654-unify-list-behavior.md) - opt.ListMode = ListModePrefix + opt.ListMode = types.ListModePrefix } - var nextFn NextObjectFunc + var nextFn types.NextObjectFunc switch { case opt.ListMode.IsDir(): @@ -133,17 +133,17 @@ func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (o return nil, services.ListModeInvalidError{Actual: opt.ListMode} } - return NewObjectIterator(ctx, nextFn, input), nil + return types.NewObjectIterator(ctx, nextFn, input), nil } -func (s *Storage) metadata(opt pairStorageMetadata) (meta *StorageMeta) { - meta = NewStorageMeta() +func (s *Storage) metadata(opt pairStorageMetadata) (meta *types.StorageMeta) { + meta = types.NewStorageMeta() meta.Name = s.name meta.WorkDir = s.workDir return meta } -func (s *Storage) nextObjectPageByDir(ctx context.Context, page *ObjectPage) error { +func (s *Storage) nextObjectPageByDir(ctx context.Context, page *types.ObjectPage) error { input := page.Status.(*objectPageStatus) entries, commonPrefix, nextMarker, _, err := s.bucket.ListFiles( @@ -161,7 +161,7 @@ func (s *Storage) nextObjectPageByDir(ctx context.Context, page *ObjectPage) err o := s.newObject(true) o.ID = v o.Path = s.getRelPath(v) - o.Mode |= ModeDir + o.Mode |= types.ModeDir page.Data = append(page.Data, o) } @@ -176,14 +176,14 @@ func (s *Storage) nextObjectPageByDir(ctx context.Context, page *ObjectPage) err } if nextMarker == "" { - return IterateDone + return types.IterateDone } input.marker = nextMarker return nil } -func (s *Storage) nextObjectPageByPrefix(ctx context.Context, page *ObjectPage) error { +func (s *Storage) nextObjectPageByPrefix(ctx context.Context, page *types.ObjectPage) error { input := page.Status.(*objectPageStatus) entries, _, nextMarker, _, err := s.bucket.ListFiles( @@ -207,7 +207,7 @@ func (s *Storage) nextObjectPageByPrefix(ctx context.Context, page *ObjectPage) } if nextMarker == "" { - return IterateDone + return types.IterateDone } input.marker = nextMarker @@ -262,7 +262,7 @@ func (s *Storage) read(ctx context.Context, path string, w io.Writer, opt pairSt return io.Copy(w, rc) } -func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *Object, err error) { +func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *types.Object, err error) { rp := s.getAbsPath(path) if opt.HasObjectMode && opt.ObjectMode.IsDir() { @@ -283,9 +283,9 @@ func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o o.ID = rp o.Path = path if opt.HasObjectMode && opt.ObjectMode.IsDir() { - o.Mode |= ModeDir + o.Mode |= types.ModeDir } else { - o.Mode |= ModeRead + o.Mode |= types.ModeRead } o.SetLastModified(convertUnixTimestampToTime(fi.PutTime)) diff --git a/services/memory/storage.go b/services/memory/storage.go index b9b6f0e7d..1dfce021b 100644 --- a/services/memory/storage.go +++ b/services/memory/storage.go @@ -8,10 +8,10 @@ import ( "go.beyondstorage.io/v5/pkg/iowrap" "go.beyondstorage.io/v5/services" - . "go.beyondstorage.io/v5/types" + "go.beyondstorage.io/v5/types" ) -func (s *Storage) commitAppend(ctx context.Context, o *Object, opt pairStorageCommitAppend) (err error) { +func (s *Storage) commitAppend(ctx context.Context, o *types.Object, opt pairStorageCommitAppend) (err error) { return } @@ -42,41 +42,41 @@ func (s *Storage) copy(ctx context.Context, src string, dst string, opt pairStor return nil } -func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { - o = NewObject(s, true) +func (s *Storage) create(path string, opt pairStorageCreate) (o *types.Object) { + o = types.NewObject(s, true) o.ID = s.absPath(path) o.Path = path if opt.HasObjectMode && opt.ObjectMode.IsDir() { - o.Mode = ModeDir + o.Mode = types.ModeDir } return o } -func (s *Storage) createAppend(ctx context.Context, path string, opt pairStorageCreateAppend) (o *Object, err error) { +func (s *Storage) createAppend(ctx context.Context, path string, opt pairStorageCreateAppend) (o *types.Object, err error) { child := s.root.insertChildByPath(s.absPath(path)) if child == nil { return nil, services.ErrObjectModeInvalid } - child.mode = ModeRead | ModeAppend + child.mode = types.ModeRead | types.ModeAppend - o = NewObject(s, true) + o = types.NewObject(s, true) o.ID = s.absPath(path) o.Path = path - o.Mode = ModeRead | ModeAppend + o.Mode = types.ModeRead | types.ModeAppend o.SetAppendOffset(0) return o, nil } -func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCreateDir) (o *Object, err error) { +func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCreateDir) (o *types.Object, err error) { if s.root.makeDirAll(strings.Split(s.absPath(path), "/")) == nil { return nil, services.ErrObjectModeInvalid } - o = NewObject(s, true) + o = types.NewObject(s, true) o.ID = s.absPath(path) o.Path = path - o.Mode |= ModeDir + o.Mode |= types.ModeDir return o, nil } @@ -89,12 +89,12 @@ func (s *Storage) delete(ctx context.Context, path string, opt pairStorageDelete return nil } -func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *ObjectIterator, err error) { - fn := NextObjectFunc(func(ctx context.Context, page *ObjectPage) error { +func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *types.ObjectIterator, err error) { + fn := types.NextObjectFunc(func(ctx context.Context, page *types.ObjectPage) error { o := s.root.getObjectByPath(s.absPath(path)) if o == nil { // If the object is not exist, we should return IterateDone instead. - return IterateDone + return types.IterateDone } if !o.mode.IsDir() { // If the object mode is not dir, we should return directly. @@ -105,7 +105,7 @@ func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (o defer o.mu.Unlock() for k, v := range o.child { - xo := NewObject(s, true) + xo := types.NewObject(s, true) xo.ID = s.absPath(path + "/" + k) xo.Path = s.relPath(path + "/" + k) xo.Mode = v.mode @@ -113,13 +113,13 @@ func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (o page.Data = append(page.Data, xo) } - return IterateDone + return types.IterateDone }) - return NewObjectIterator(ctx, fn, nil), nil + return types.NewObjectIterator(ctx, fn, nil), nil } -func (s *Storage) metadata(opt pairStorageMetadata) (meta *StorageMeta) { - return &StorageMeta{ +func (s *Storage) metadata(opt pairStorageMetadata) (meta *types.StorageMeta) { + return &types.StorageMeta{ Name: "memory", WorkDir: "/", } @@ -172,13 +172,13 @@ func (s *Storage) read(ctx context.Context, path string, w io.Writer, opt pairSt return int64(written), nil } -func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *Object, err error) { +func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *types.Object, err error) { ro := s.root.getObjectByPath(s.absPath(path)) if ro == nil { return nil, services.ErrObjectNotExist } - o = NewObject(s, true) + o = types.NewObject(s, true) o.ID = s.absPath(path) o.Path = path o.Mode = ro.mode @@ -202,7 +202,7 @@ func (s *Storage) write(ctx context.Context, path string, r io.Reader, size int6 r = iowrap.CallbackReader(r, opt.IoCallback) } - o.mode = ModeRead + o.mode = types.ModeRead o.data = make([]byte, size) if size == 0 { @@ -222,7 +222,7 @@ func (s *Storage) write(ctx context.Context, path string, r io.Reader, size int6 return int64(read), nil } -func (s *Storage) writeAppend(ctx context.Context, o *Object, r io.Reader, size int64, opt pairStorageWriteAppend) (n int64, err error) { +func (s *Storage) writeAppend(ctx context.Context, o *types.Object, r io.Reader, size int64, opt pairStorageWriteAppend) (n int64, err error) { ro := s.root.getObjectByPath(o.ID) if ro == nil { ro = s.root.insertChildByPath(o.ID) diff --git a/services/minio/service.go b/services/minio/service.go index 3cf931bec..45e49c465 100644 --- a/services/minio/service.go +++ b/services/minio/service.go @@ -6,10 +6,10 @@ import ( "github.com/minio/minio-go/v7" ps "go.beyondstorage.io/v5/pairs" - . "go.beyondstorage.io/v5/types" + "go.beyondstorage.io/v5/types" ) -func (s *Service) create(ctx context.Context, name string, opt pairServiceCreate) (store Storager, err error) { +func (s *Service) create(ctx context.Context, name string, opt pairServiceCreate) (store types.Storager, err error) { st, err := s.newStorage(ps.WithName(name)) if err != nil { return nil, err @@ -29,7 +29,7 @@ func (s *Service) delete(ctx context.Context, name string, opt pairServiceDelete return nil } -func (s *Service) get(ctx context.Context, name string, opt pairServiceGet) (store Storager, err error) { +func (s *Service) get(ctx context.Context, name string, opt pairServiceGet) (store types.Storager, err error) { st, err := s.newStorage(ps.WithName(name)) if err != nil { return nil, err @@ -37,12 +37,12 @@ func (s *Service) get(ctx context.Context, name string, opt pairServiceGet) (sto return st, nil } -func (s *Service) list(ctx context.Context, opt pairServiceList) (sti *StoragerIterator, err error) { +func (s *Service) list(ctx context.Context, opt pairServiceList) (sti *types.StoragerIterator, err error) { input := &storagePageStatus{} - return NewStoragerIterator(ctx, s.nextStoragePage, input), nil + return types.NewStoragerIterator(ctx, s.nextStoragePage, input), nil } -func (s *Service) nextStoragePage(ctx context.Context, page *StoragerPage) (err error) { +func (s *Service) nextStoragePage(ctx context.Context, page *types.StoragerPage) (err error) { input := page.Status.(*storagePageStatus) input.buckets, err = s.service.ListBuckets(ctx) if err != nil { @@ -55,5 +55,5 @@ func (s *Service) nextStoragePage(ctx context.Context, page *StoragerPage) (err } page.Data = append(page.Data, store) } - return IterateDone + return types.IterateDone } diff --git a/services/minio/storage.go b/services/minio/storage.go index c4aeb7dbd..22915e869 100644 --- a/services/minio/storage.go +++ b/services/minio/storage.go @@ -13,7 +13,7 @@ import ( ps "go.beyondstorage.io/v5/pairs" "go.beyondstorage.io/v5/pkg/iowrap" "go.beyondstorage.io/v5/services" - . "go.beyondstorage.io/v5/types" + "go.beyondstorage.io/v5/types" ) const defaultListObjectBufferSize = 100 @@ -31,7 +31,7 @@ func (s *Storage) copy(ctx context.Context, src string, dst string, opt pairStor return err } -func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { +func (s *Storage) create(path string, opt pairStorageCreate) (o *types.Object) { rp := s.getAbsPath(path) if opt.HasObjectMode && opt.ObjectMode.IsDir() { if !s.features.VirtualDir { @@ -39,10 +39,10 @@ func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { } rp += "/" o = s.newObject(true) - o.Mode = ModeDir + o.Mode = types.ModeDir } else { o = s.newObject(false) - o.Mode = ModeRead + o.Mode = types.ModeRead } o.ID = rp o.Path = path @@ -62,7 +62,7 @@ func (s *Storage) delete(ctx context.Context, path string, opt pairStorageDelete return err } -func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *ObjectIterator, err error) { +func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *types.ObjectIterator, err error) { rp := s.getAbsPath(path) options := minio.ListObjectsOptions{} if !opt.HasListMode || opt.ListMode.IsPrefix() { @@ -79,17 +79,17 @@ func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (o bufferSize: defaultListObjectBufferSize, options: options, } - return NewObjectIterator(ctx, s.nextObjectPage, input), nil + return types.NewObjectIterator(ctx, s.nextObjectPage, input), nil } -func (s *Storage) metadata(opt pairStorageMetadata) (meta *StorageMeta) { - meta = NewStorageMeta() +func (s *Storage) metadata(opt pairStorageMetadata) (meta *types.StorageMeta) { + meta = types.NewStorageMeta() meta.Name = s.bucket meta.WorkDir = s.workDir return meta } -func (s *Storage) nextObjectPage(ctx context.Context, page *ObjectPage) error { +func (s *Storage) nextObjectPage(ctx context.Context, page *types.ObjectPage) error { input := page.Status.(*objectPageStatus) if input.objChan == nil { input.objChan = s.client.ListObjects(ctx, s.bucket, input.options) @@ -97,7 +97,7 @@ func (s *Storage) nextObjectPage(ctx context.Context, page *ObjectPage) error { for i := 0; i < input.bufferSize; i++ { v, ok := <-input.objChan if !ok { - return IterateDone + return types.IterateDone } if v.Err != nil { return v.Err @@ -153,7 +153,7 @@ func (s *Storage) read(ctx context.Context, path string, w io.Writer, opt pairSt return io.Copy(w, rc) } -func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *Object, err error) { +func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *types.Object, err error) { rp := s.getAbsPath(path) if opt.HasObjectMode && opt.ObjectMode.IsDir() { if !s.features.VirtualDir { diff --git a/services/obs/service.go b/services/obs/service.go index f7168b0ae..926313448 100644 --- a/services/obs/service.go +++ b/services/obs/service.go @@ -6,10 +6,10 @@ import ( "github.com/huaweicloud/huaweicloud-sdk-go-obs/obs" ps "go.beyondstorage.io/v5/pairs" - . "go.beyondstorage.io/v5/types" + "go.beyondstorage.io/v5/types" ) -func (s *Service) create(ctx context.Context, name string, opt pairServiceCreate) (store Storager, err error) { +func (s *Service) create(ctx context.Context, name string, opt pairServiceCreate) (store types.Storager, err error) { pairs := append(opt.pairs, ps.WithName(name)) st, err := s.newStorage(pairs...) @@ -38,7 +38,7 @@ func (s *Service) delete(ctx context.Context, name string, opt pairServiceDelete return nil } -func (s *Service) get(ctx context.Context, name string, opt pairServiceGet) (store Storager, err error) { +func (s *Service) get(ctx context.Context, name string, opt pairServiceGet) (store types.Storager, err error) { pairs := append(opt.pairs, ps.WithName(name)) st, err := s.newStorage(pairs...) @@ -49,13 +49,13 @@ func (s *Service) get(ctx context.Context, name string, opt pairServiceGet) (sto return st, nil } -func (s *Service) list(ctx context.Context, opt pairServiceList) (sti *StoragerIterator, err error) { +func (s *Service) list(ctx context.Context, opt pairServiceList) (sti *types.StoragerIterator, err error) { input := &storagePageStatus{} - return NewStoragerIterator(ctx, s.nextStoragePage, input), nil + return types.NewStoragerIterator(ctx, s.nextStoragePage, input), nil } -func (s *Service) nextStoragePage(ctx context.Context, page *StoragerPage) error { +func (s *Service) nextStoragePage(ctx context.Context, page *types.StoragerPage) error { input := &obs.ListBucketsInput{ QueryLocation: true, } @@ -74,5 +74,5 @@ func (s *Service) nextStoragePage(ctx context.Context, page *StoragerPage) error page.Data = append(page.Data, store) } - return IterateDone + return types.IterateDone } diff --git a/services/obs/storage.go b/services/obs/storage.go index 483fdd314..7b65f56a3 100644 --- a/services/obs/storage.go +++ b/services/obs/storage.go @@ -10,10 +10,10 @@ import ( ps "go.beyondstorage.io/v5/pairs" "go.beyondstorage.io/v5/pkg/iowrap" "go.beyondstorage.io/v5/services" - . "go.beyondstorage.io/v5/types" + "go.beyondstorage.io/v5/types" ) -func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { +func (s *Storage) create(path string, opt pairStorageCreate) (o *types.Object) { rp := s.getAbsPath(path) if opt.HasObjectMode && opt.ObjectMode.IsDir() { @@ -23,10 +23,10 @@ func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { rp += "/" o = s.newObject(true) - o.Mode |= ModeDir + o.Mode |= types.ModeDir } else { o = s.newObject(false) - o.Mode |= ModeRead + o.Mode |= types.ModeRead } o.ID = rp @@ -65,7 +65,7 @@ func (s *Storage) delete(ctx context.Context, path string, opt pairStorageDelete return nil } -func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *ObjectIterator, err error) { +func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *types.ObjectIterator, err error) { input := &objectPageStatus{ maxKeys: 200, prefix: s.getAbsPath(path), @@ -74,10 +74,10 @@ func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (o if !opt.HasListMode { // Support `ListModePrefix` as the default `ListMode`. // ref: [GSP-46](https://github.com/beyondstorage/go-storage/blob/master/docs/rfcs/654-unify-list-behavior.md) - opt.ListMode = ListModePrefix + opt.ListMode = types.ListModePrefix } - var nextFn NextObjectFunc + var nextFn types.NextObjectFunc switch { case opt.ListMode.IsDir(): @@ -89,17 +89,17 @@ func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (o return nil, services.ListModeInvalidError{Actual: opt.ListMode} } - return NewObjectIterator(ctx, nextFn, input), nil + return types.NewObjectIterator(ctx, nextFn, input), nil } -func (s *Storage) metadata(opt pairStorageMetadata) (meta *StorageMeta) { - meta = NewStorageMeta() +func (s *Storage) metadata(opt pairStorageMetadata) (meta *types.StorageMeta) { + meta = types.NewStorageMeta() meta.Name = s.bucket meta.WorkDir = s.workDir return meta } -func (s *Storage) nextObjectPageByDir(ctx context.Context, page *ObjectPage) error { +func (s *Storage) nextObjectPageByDir(ctx context.Context, page *types.ObjectPage) error { input := page.Status.(*objectPageStatus) listInput := &obs.ListObjectsInput{ @@ -119,7 +119,7 @@ func (s *Storage) nextObjectPageByDir(ctx context.Context, page *ObjectPage) err o := s.newObject(true) o.ID = v o.Path = s.getRelPath(v) - o.Mode |= ModeDir + o.Mode |= types.ModeDir page.Data = append(page.Data, o) } @@ -134,10 +134,10 @@ func (s *Storage) nextObjectPageByDir(ctx context.Context, page *ObjectPage) err } if output.NextMarker == "" { - return IterateDone + return types.IterateDone } if !output.IsTruncated { - return IterateDone + return types.IterateDone } input.marker = output.NextMarker @@ -145,7 +145,7 @@ func (s *Storage) nextObjectPageByDir(ctx context.Context, page *ObjectPage) err return err } -func (s *Storage) nextObjectPageByPrefix(ctx context.Context, page *ObjectPage) error { +func (s *Storage) nextObjectPageByPrefix(ctx context.Context, page *types.ObjectPage) error { input := page.Status.(*objectPageStatus) listInput := &obs.ListObjectsInput{ @@ -171,10 +171,10 @@ func (s *Storage) nextObjectPageByPrefix(ctx context.Context, page *ObjectPage) } if output.NextMarker == "" { - return IterateDone + return types.IterateDone } if !output.IsTruncated { - return IterateDone + return types.IterateDone } input.marker = output.NextMarker @@ -202,7 +202,7 @@ func (s *Storage) read(ctx context.Context, path string, w io.Writer, opt pairSt return io.Copy(w, rc) } -func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *Object, err error) { +func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *types.Object, err error) { rp := s.getAbsPath(path) if opt.HasObjectMode && opt.ObjectMode.IsDir() { @@ -228,9 +228,9 @@ func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o o.Path = path if opt.HasObjectMode && opt.ObjectMode.IsDir() { - o.Mode |= ModeDir + o.Mode |= types.ModeDir } else { - o.Mode |= ModeRead + o.Mode |= types.ModeRead } o.SetContentLength(output.ContentLength) diff --git a/services/ocios/storage.go b/services/ocios/storage.go index 61f2c86f3..3af3702ea 100644 --- a/services/ocios/storage.go +++ b/services/ocios/storage.go @@ -4,10 +4,10 @@ import ( "context" "io" - . "go.beyondstorage.io/v5/types" + "go.beyondstorage.io/v5/types" ) -func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { +func (s *Storage) create(path string, opt pairStorageCreate) (o *types.Object) { panic("not implemented") } @@ -15,11 +15,11 @@ func (s *Storage) delete(ctx context.Context, path string, opt pairStorageDelete panic("not implemented") } -func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *ObjectIterator, err error) { +func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *types.ObjectIterator, err error) { panic("not implemented") } -func (s *Storage) metadata(opt pairStorageMetadata) (meta *StorageMeta) { +func (s *Storage) metadata(opt pairStorageMetadata) (meta *types.StorageMeta) { panic("not implemented") } @@ -27,7 +27,7 @@ func (s *Storage) read(ctx context.Context, path string, w io.Writer, opt pairSt panic("not implemented") } -func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *Object, err error) { +func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *types.Object, err error) { panic("not implemented") } diff --git a/services/onedrive/storage.go b/services/onedrive/storage.go index c9c28d5b6..6e2b4571f 100644 --- a/services/onedrive/storage.go +++ b/services/onedrive/storage.go @@ -8,12 +8,12 @@ import ( "go.beyondstorage.io/v5/pkg/iowrap" "go.beyondstorage.io/v5/services" - . "go.beyondstorage.io/v5/types" + "go.beyondstorage.io/v5/types" ) -func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { +func (s *Storage) create(path string, opt pairStorageCreate) (o *types.Object) { o = s.newObject(false) - o.Mode = ModeRead + o.Mode = types.ModeRead o.ID = s.getAbsPath(path) o.Path = path @@ -34,7 +34,7 @@ func (s *Storage) delete(ctx context.Context, path string, opt pairStorageDelete return } -func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *ObjectIterator, err error) { +func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *types.ObjectIterator, err error) { input := &objectPageStatus{ // need to passed by pairs? limit: 200, @@ -45,24 +45,24 @@ func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (o } if !opt.HasListMode || opt.ListMode.IsDir() { - return NewObjectIterator(ctx, s.nextObjectPage, input), nil + return types.NewObjectIterator(ctx, s.nextObjectPage, input), nil } else { return nil, services.ListModeInvalidError{Actual: opt.ListMode} } } -func (s *Storage) metadata(opt pairStorageMetadata) (meta *StorageMeta) { - meta = NewStorageMeta() +func (s *Storage) metadata(opt pairStorageMetadata) (meta *types.StorageMeta) { + meta = types.NewStorageMeta() meta.WorkDir = s.workDir return } -func (s *Storage) nextObjectPage(ctx context.Context, page *ObjectPage) error { +func (s *Storage) nextObjectPage(ctx context.Context, page *types.ObjectPage) error { iteratorObj := page.Status.(*objectPageStatus) if iteratorObj.done { - return IterateDone + return types.IterateDone } items, continuationToken, err := s.client.List(ctx, iteratorObj.rp, iteratorObj.continuationToken, iteratorObj.limit) @@ -80,7 +80,7 @@ func (s *Storage) nextObjectPage(ctx context.Context, page *ObjectPage) error { // make a new buffer at one time // avoid extra spending(append) - page.Data = make([]*Object, len(items)) + page.Data = make([]*types.Object, len(items)) for k, v := range items { page.Data[k] = s.formatObject(v, iteratorObj.dir, iteratorObj.rp) } @@ -128,7 +128,7 @@ func (s *Storage) read(ctx context.Context, path string, w io.Writer, opt pairSt return io.Copy(w, object) } -func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *Object, err error) { +func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *types.Object, err error) { uniquePath := s.getAbsPath(path) objInfo, err := s.client.GetItem(ctx, uniquePath) if err != nil { @@ -138,7 +138,7 @@ func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o o = s.newObject(true) o.ID = uniquePath o.Path = path - o.Mode |= ModeRead + o.Mode |= types.ModeRead o.SetEtag(objInfo.Etag) o.SetLastModified(objInfo.LastModifiedDateTime) o.SetContentLength(objInfo.Size) diff --git a/services/oss/storage.go b/services/oss/storage.go index 39010f4f5..f94a12657 100644 --- a/services/oss/storage.go +++ b/services/oss/storage.go @@ -13,14 +13,14 @@ import ( "go.beyondstorage.io/v5/pkg/headers" "go.beyondstorage.io/v5/pkg/iowrap" "go.beyondstorage.io/v5/services" - . "go.beyondstorage.io/v5/types" + "go.beyondstorage.io/v5/types" ) -func (s *Storage) commitAppend(ctx context.Context, o *Object, opt pairStorageCommitAppend) (err error) { +func (s *Storage) commitAppend(ctx context.Context, o *types.Object, opt pairStorageCommitAppend) (err error) { return } -func (s *Storage) completeMultipart(ctx context.Context, o *Object, parts []*Part, opt pairStorageCompleteMultipart) (err error) { +func (s *Storage) completeMultipart(ctx context.Context, o *types.Object, parts []*types.Part, opt pairStorageCompleteMultipart) (err error) { imur := oss.InitiateMultipartUploadResult{ Bucket: s.bucket.BucketName, Key: o.ID, @@ -42,18 +42,18 @@ func (s *Storage) completeMultipart(ctx context.Context, o *Object, parts []*Par return } - o.Mode &= ^ModePart - o.Mode |= ModeRead + o.Mode &= ^types.ModePart + o.Mode |= types.ModeRead return } -func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { +func (s *Storage) create(path string, opt pairStorageCreate) (o *types.Object) { rp := s.getAbsPath(path) // Handle create multipart object separately. if opt.HasMultipartID { o = s.newObject(true) - o.Mode = ModePart + o.Mode = types.ModePart o.SetMultipartID(opt.MultipartID) } else { if opt.HasObjectMode && opt.ObjectMode.IsDir() { @@ -62,10 +62,10 @@ func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { } rp += "/" o = s.newObject(true) - o.Mode = ModeDir + o.Mode = types.ModeDir } else { o = s.newObject(false) - o.Mode = ModeRead + o.Mode = types.ModeRead } } o.ID = rp @@ -73,7 +73,7 @@ func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { return o } -func (s *Storage) createAppend(ctx context.Context, path string, opt pairStorageCreateAppend) (o *Object, err error) { +func (s *Storage) createAppend(ctx context.Context, path string, opt pairStorageCreateAppend) (o *types.Object, err error) { rp := s.getAbsPath(path) // oss `append` doesn't support `overwrite`, so we need to check and delete the object if exists. @@ -108,7 +108,7 @@ func (s *Storage) createAppend(ctx context.Context, path string, opt pairStorage } o = s.newObject(true) - o.Mode = ModeRead | ModeAppend + o.Mode = types.ModeRead | types.ModeAppend o.ID = rp o.Path = path o.SetAppendOffset(offset) @@ -128,9 +128,9 @@ func (s *Storage) createAppend(ctx context.Context, path string, opt pairStorage return o, nil } -func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCreateDir) (o *Object, err error) { +func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCreateDir) (o *types.Object, err error) { if !s.features.VirtualDir { - err = NewOperationNotImplementedError("create_dir") + err = types.NewOperationNotImplementedError("create_dir") return } rp := s.getAbsPath(path) @@ -153,11 +153,11 @@ func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCre o = s.newObject(true) o.Path = path o.ID = rp - o.Mode |= ModeDir + o.Mode |= types.ModeDir return } -func (s *Storage) createLink(ctx context.Context, path string, target string, opt pairStorageCreateLink) (o *Object, err error) { +func (s *Storage) createLink(ctx context.Context, path string, target string, opt pairStorageCreateLink) (o *types.Object, err error) { rt := s.getAbsPath(target) rp := s.getAbsPath(path) @@ -173,12 +173,12 @@ func (s *Storage) createLink(ctx context.Context, path string, target string, op // oss does not have an absolute path, so when we call `getAbsPath`, it will remove the prefix `/`. // To ensure that the path matches the one the user gets, we should re-add `/` here. o.SetLinkTarget("/" + rt) - o.Mode |= ModeLink + o.Mode |= types.ModeLink return } -func (s *Storage) createMultipart(ctx context.Context, path string, opt pairStorageCreateMultipart) (o *Object, err error) { +func (s *Storage) createMultipart(ctx context.Context, path string, opt pairStorageCreateMultipart) (o *types.Object, err error) { rp := s.getAbsPath(path) options := make([]oss.Option, 0, 3) @@ -206,7 +206,7 @@ func (s *Storage) createMultipart(ctx context.Context, path string, opt pairStor o = s.newObject(true) o.ID = rp o.Path = path - o.Mode |= ModePart + o.Mode |= types.ModePart o.SetMultipartID(output.UploadID) return o, nil @@ -253,7 +253,7 @@ func (s *Storage) delete(ctx context.Context, path string, opt pairStorageDelete return nil } -func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *ObjectIterator, err error) { +func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *types.ObjectIterator, err error) { input := &objectPageStatus{ maxKeys: 200, prefix: s.getAbsPath(path), @@ -262,10 +262,10 @@ func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (o if !opt.HasListMode { // Support `ListModePrefix` as the default `ListMode`. // ref: [GSP-654](https://github.com/beyondstorage/go-storage/blob/master/docs/rfcs/654-unify-list-behavior.md) - opt.ListMode = ListModePrefix + opt.ListMode = types.ListModePrefix } - var nextFn NextObjectFunc + var nextFn types.NextObjectFunc switch { case opt.ListMode.IsPart(): @@ -279,21 +279,21 @@ func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (o return nil, services.ListModeInvalidError{Actual: opt.ListMode} } - return NewObjectIterator(ctx, nextFn, input), nil + return types.NewObjectIterator(ctx, nextFn, input), nil } -func (s *Storage) listMultipart(ctx context.Context, o *Object, opt pairStorageListMultipart) (pi *PartIterator, err error) { +func (s *Storage) listMultipart(ctx context.Context, o *types.Object, opt pairStorageListMultipart) (pi *types.PartIterator, err error) { input := &partPageStatus{ maxParts: 200, key: o.ID, uploadId: o.MustGetMultipartID(), } - return NewPartIterator(ctx, s.nextPartPage, input), nil + return types.NewPartIterator(ctx, s.nextPartPage, input), nil } -func (s *Storage) metadata(opt pairStorageMetadata) (meta *StorageMeta) { - meta = NewStorageMeta() +func (s *Storage) metadata(opt pairStorageMetadata) (meta *types.StorageMeta) { + meta = types.NewStorageMeta() meta.Name = s.bucket.BucketName meta.WorkDir = s.workDir // set write restriction @@ -307,7 +307,7 @@ func (s *Storage) metadata(opt pairStorageMetadata) (meta *StorageMeta) { return } -func (s *Storage) nextObjectPageByDir(ctx context.Context, page *ObjectPage) error { +func (s *Storage) nextObjectPageByDir(ctx context.Context, page *types.ObjectPage) error { input := page.Status.(*objectPageStatus) output, err := s.bucket.ListObjects( @@ -324,7 +324,7 @@ func (s *Storage) nextObjectPageByDir(ctx context.Context, page *ObjectPage) err o := s.newObject(true) o.ID = v o.Path = s.getRelPath(v) - o.Mode |= ModeDir + o.Mode |= types.ModeDir page.Data = append(page.Data, o) } @@ -339,14 +339,14 @@ func (s *Storage) nextObjectPageByDir(ctx context.Context, page *ObjectPage) err } if !output.IsTruncated { - return IterateDone + return types.IterateDone } input.marker = output.NextMarker return nil } -func (s *Storage) nextObjectPageByPrefix(ctx context.Context, page *ObjectPage) error { +func (s *Storage) nextObjectPageByPrefix(ctx context.Context, page *types.ObjectPage) error { input := page.Status.(*objectPageStatus) output, err := s.bucket.ListObjects( @@ -368,14 +368,14 @@ func (s *Storage) nextObjectPageByPrefix(ctx context.Context, page *ObjectPage) } if !output.IsTruncated { - return IterateDone + return types.IterateDone } input.marker = output.NextMarker return nil } -func (s *Storage) nextPartObjectPageByPrefix(ctx context.Context, page *ObjectPage) error { +func (s *Storage) nextPartObjectPageByPrefix(ctx context.Context, page *types.ObjectPage) error { input := page.Status.(*objectPageStatus) options := make([]oss.Option, 0, 5) @@ -394,17 +394,17 @@ func (s *Storage) nextPartObjectPageByPrefix(ctx context.Context, page *ObjectPa o := s.newObject(true) o.ID = v.Key o.Path = s.getRelPath(v.Key) - o.Mode |= ModePart + o.Mode |= types.ModePart o.SetMultipartID(v.UploadID) page.Data = append(page.Data, o) } if output.NextKeyMarker == "" && output.NextUploadIDMarker == "" { - return IterateDone + return types.IterateDone } if !output.IsTruncated { - return IterateDone + return types.IterateDone } input.marker = output.NextKeyMarker @@ -412,7 +412,7 @@ func (s *Storage) nextPartObjectPageByPrefix(ctx context.Context, page *ObjectPa return nil } -func (s *Storage) nextPartPage(ctx context.Context, page *PartPage) error { +func (s *Storage) nextPartPage(ctx context.Context, page *types.PartPage) error { input := page.Status.(*partPageStatus) imur := oss.InitiateMultipartUploadResult{ @@ -431,7 +431,7 @@ func (s *Storage) nextPartPage(ctx context.Context, page *PartPage) error { } for _, v := range output.UploadedParts { - p := &Part{ + p := &types.Part{ // The returned `PartNumber` is [1, 10000]. // Set Index=v.PartNumber-1 here to make the `PartNumber` zero-based for user. Index: v.PartNumber - 1, @@ -443,7 +443,7 @@ func (s *Storage) nextPartPage(ctx context.Context, page *PartPage) error { } if !output.IsTruncated { - return IterateDone + return types.IterateDone } partNumberMarker, err := strconv.Atoi(output.NextPartNumberMarker) @@ -481,7 +481,7 @@ func (s *Storage) read(ctx context.Context, path string, w io.Writer, opt pairSt return io.Copy(w, rc) } -func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *Object, err error) { +func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *types.Object, err error) { rp := s.getAbsPath(path) if symlink, err := s.bucket.GetSymlink(rp); err == nil { @@ -493,7 +493,7 @@ func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o target := symlink.Get(oss.HTTPHeaderOssSymlinkTarget) o.SetLinkTarget("/" + target) - o.Mode |= ModeLink + o.Mode |= types.ModeLink return o, nil } @@ -511,7 +511,7 @@ func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o o = s.newObject(true) o.ID = rp o.Path = path - o.Mode |= ModePart + o.Mode |= types.ModePart o.SetMultipartID(opt.MultipartID) return o, nil } @@ -534,9 +534,9 @@ func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o o.ID = rp o.Path = path if opt.HasObjectMode && opt.ObjectMode.IsDir() { - o.Mode |= ModeDir + o.Mode |= types.ModeDir } else { - o.Mode |= ModeRead + o.Mode |= types.ModeRead } if v := output.Get(headers.ContentLength); v != "" { @@ -627,7 +627,7 @@ func (s *Storage) write(ctx context.Context, path string, r io.Reader, size int6 return size, nil } -func (s *Storage) writeAppend(ctx context.Context, o *Object, r io.Reader, size int64, opt pairStorageWriteAppend) (n int64, err error) { +func (s *Storage) writeAppend(ctx context.Context, o *types.Object, r io.Reader, size int64, opt pairStorageWriteAppend) (n int64, err error) { rp := o.GetID() if opt.HasIoCallback { @@ -652,7 +652,7 @@ func (s *Storage) writeAppend(ctx context.Context, o *Object, r io.Reader, size return size, err } -func (s *Storage) writeMultipart(ctx context.Context, o *Object, r io.Reader, size int64, index int, opt pairStorageWriteMultipart) (n int64, part *Part, err error) { +func (s *Storage) writeMultipart(ctx context.Context, o *types.Object, r io.Reader, size int64, index int, opt pairStorageWriteMultipart) (n int64, part *types.Part, err error) { if index < 0 || index >= multipartNumberMaximum { err = fmt.Errorf("multipart number limit exceeded: %w", services.ErrRestrictionDissatisfied) return @@ -682,7 +682,7 @@ func (s *Storage) writeMultipart(ctx context.Context, o *Object, r io.Reader, si return } - part = &Part{ + part = &types.Part{ // Set part.Index=index instead of part.Index=output.PartNumber to maintain `partNumber` consistency for user. Index: index, Size: size, diff --git a/services/qingstor/generated.go b/services/qingstor/generated.go index 058fd89d3..3668bdb67 100644 --- a/services/qingstor/generated.go +++ b/services/qingstor/generated.go @@ -444,7 +444,6 @@ var ( _ Linker = &Storage{} _ Mover = &Storage{} _ Multiparter = &Storage{} - _ Reacher = &Storage{} _ StorageHTTPSigner = &Storage{} _ Storager = &Storage{} ) @@ -622,7 +621,6 @@ type DefaultStoragePairs struct { QuerySignHTTPDelete []Pair QuerySignHTTPRead []Pair QuerySignHTTPWrite []Pair - Reach []Pair Read []Pair Stat []Pair Write []Pair @@ -1153,36 +1151,6 @@ func (s *Storage) parsePairStorageQuerySignHTTPWrite(opts []Pair) (pairStorageQu return result, nil } -type pairStorageReach struct { - pairs []Pair - // Required pairs - HasExpire bool - Expire time.Duration - // Optional pairs -} - -func (s *Storage) parsePairStorageReach(opts []Pair) (pairStorageReach, error) { - result := - pairStorageReach{pairs: opts} - - for _, v := range opts { - switch v.Key { - case "expire": - if result.HasExpire { - continue - } - result.HasExpire = true - result.Expire = v.Value.(time.Duration) - default: - return pairStorageReach{}, services.PairUnsupportedError{Pair: v} - } - } - if !result.HasExpire { - return pairStorageReach{}, services.PairRequiredError{Keys: []string{"expire"}} - } - return result, nil -} - type pairStorageRead struct { pairs []Pair // Required pairs @@ -1728,25 +1696,6 @@ func (s *Storage) QuerySignHTTPWriteWithContext(ctx context.Context, path string } return s.querySignHTTPWrite(ctx, strings.ReplaceAll(path, "\\", "/"), size, expire, opt) } -func (s *Storage) Reach(path string, pairs ...Pair) (url string, err error) { - ctx := context.Background() - return s.ReachWithContext(ctx, path, pairs...) -} -func (s *Storage) ReachWithContext(ctx context.Context, path string, pairs ...Pair) (url string, err error) { - defer func() { - err = - s.formatError("reach", err, path) - }() - - pairs = append(pairs, s.defaultPairs.Reach...) - var opt pairStorageReach - - opt, err = s.parsePairStorageReach(pairs) - if err != nil { - return - } - return s.reach(ctx, strings.ReplaceAll(path, "\\", "/"), opt) -} func (s *Storage) Read(path string, w io.Writer, pairs ...Pair) (n int64, err error) { ctx := context.Background() return s.ReadWithContext(ctx, path, w, pairs...) diff --git a/services/qingstor/service.go b/services/qingstor/service.go index 93d32fccd..3ae2a008b 100644 --- a/services/qingstor/service.go +++ b/services/qingstor/service.go @@ -6,10 +6,10 @@ import ( "github.com/qingstor/qingstor-sdk-go/v4/service" ps "go.beyondstorage.io/v5/pairs" - . "go.beyondstorage.io/v5/types" + "go.beyondstorage.io/v5/types" ) -func (s *Service) create(ctx context.Context, name string, opt pairServiceCreate) (store Storager, err error) { +func (s *Service) create(ctx context.Context, name string, opt pairServiceCreate) (store types.Storager, err error) { // ServicePairCreate requires location, so we don't need to add location into pairs pairs := append(opt.pairs, ps.WithName(name)) @@ -39,7 +39,7 @@ func (s *Service) delete(ctx context.Context, name string, opt pairServiceDelete return nil } -func (s *Service) get(ctx context.Context, name string, opt pairServiceGet) (store Storager, err error) { +func (s *Service) get(ctx context.Context, name string, opt pairServiceGet) (store types.Storager, err error) { pairs := append(opt.pairs, ps.WithName(name)) store, err = s.newStorage(pairs...) @@ -49,17 +49,17 @@ func (s *Service) get(ctx context.Context, name string, opt pairServiceGet) (sto return } -func (s *Service) list(ctx context.Context, opt pairServiceList) (it *StoragerIterator, err error) { +func (s *Service) list(ctx context.Context, opt pairServiceList) (it *types.StoragerIterator, err error) { input := &storagePageStatus{} if opt.HasLocation { input.location = opt.Location } - return NewStoragerIterator(ctx, s.nextStoragePage, input), nil + return types.NewStoragerIterator(ctx, s.nextStoragePage, input), nil } -func (s *Service) nextStoragePage(ctx context.Context, page *StoragerPage) error { +func (s *Service) nextStoragePage(ctx context.Context, page *types.StoragerPage) error { input := page.Status.(*storagePageStatus) serviceInput := &service.ListBucketsInput{ @@ -85,7 +85,7 @@ func (s *Service) nextStoragePage(ctx context.Context, page *StoragerPage) error input.offset += len(output.Buckets) if input.offset >= service.IntValue(output.Count) { - return IterateDone + return types.IterateDone } return nil diff --git a/services/qingstor/service.toml b/services/qingstor/service.toml index b8909fb16..97dcaf70c 100644 --- a/services/qingstor/service.toml +++ b/services/qingstor/service.toml @@ -18,7 +18,7 @@ optional = ["location"] [namespace.storage] features = ["virtual_dir", "virtual_link"] -implement = ["appender", "copier", "direr", "fetcher", "linker", "mover", "multiparter", "reacher", "storage_http_signer"] +implement = ["appender", "copier", "direr", "fetcher", "linker", "mover", "multiparter", "storage_http_signer"] [namespace.storage.new] required = ["name"] @@ -39,9 +39,6 @@ optional = ["multipart_id", "object_mode"] [namespace.storage.op.list] optional = ["list_mode"] -[namespace.storage.op.reach] -required = ["expire"] - [namespace.storage.op.read] optional = ["offset", "io_callback", "size", "encryption_customer_algorithm", "encryption_customer_key"] diff --git a/services/qingstor/storage.go b/services/qingstor/storage.go index 2fe9231e7..9a4361c65 100644 --- a/services/qingstor/storage.go +++ b/services/qingstor/storage.go @@ -14,14 +14,14 @@ import ( ps "go.beyondstorage.io/v5/pairs" "go.beyondstorage.io/v5/pkg/iowrap" "go.beyondstorage.io/v5/services" - . "go.beyondstorage.io/v5/types" + "go.beyondstorage.io/v5/types" ) -func (s *Storage) commitAppend(ctx context.Context, o *Object, opt pairStorageCommitAppend) (err error) { +func (s *Storage) commitAppend(ctx context.Context, o *types.Object, opt pairStorageCommitAppend) (err error) { return } -func (s *Storage) completeMultipart(ctx context.Context, o *Object, parts []*Part, opt pairStorageCompleteMultipart) (err error) { +func (s *Storage) completeMultipart(ctx context.Context, o *types.Object, parts []*types.Part, opt pairStorageCompleteMultipart) (err error) { objectParts := make([]*service.ObjectPartType, 0, len(parts)) for _, v := range parts { objectParts = append(objectParts, &service.ObjectPartType{ @@ -38,8 +38,8 @@ func (s *Storage) completeMultipart(ctx context.Context, o *Object, parts []*Par if err != nil { return } - o.Mode.Del(ModePart) - o.Mode.Add(ModeRead) + o.Mode.Del(types.ModePart) + o.Mode.Add(types.ModeRead) return } @@ -71,14 +71,14 @@ func (s *Storage) copy(ctx context.Context, src string, dst string, opt pairStor return nil } -func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { +func (s *Storage) create(path string, opt pairStorageCreate) (o *types.Object) { rp := s.getAbsPath(path) // handle create multipart object separately // if opt has multipartID, set object done, because we can't stat multipart object in QingStor if opt.HasMultipartID { o = s.newObject(true) - o.Mode = ModePart + o.Mode = types.ModePart o.SetMultipartID(opt.MultipartID) } else { if opt.HasObjectMode && opt.ObjectMode.IsDir() { @@ -88,10 +88,10 @@ func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { rp += "/" o = s.newObject(true) - o.Mode = ModeDir + o.Mode = types.ModeDir } else { o = s.newObject(false) - o.Mode = ModeRead + o.Mode = types.ModeRead } } o.ID = rp @@ -99,7 +99,7 @@ func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { return o } -func (s *Storage) createAppend(ctx context.Context, path string, opt pairStorageCreateAppend) (o *Object, err error) { +func (s *Storage) createAppend(ctx context.Context, path string, opt pairStorageCreateAppend) (o *types.Object, err error) { rp := s.getAbsPath(path) // We should set offset to 0 whether the object exists or not. @@ -138,7 +138,7 @@ func (s *Storage) createAppend(ctx context.Context, path string, opt pairStorage } o = s.newObject(true) - o.Mode = ModeRead | ModeAppend + o.Mode = types.ModeRead | types.ModeAppend o.ID = rp o.Path = path o.SetAppendOffset(offset) @@ -153,9 +153,9 @@ func (s *Storage) createAppend(ctx context.Context, path string, opt pairStorage return o, nil } -func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCreateDir) (o *Object, err error) { +func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCreateDir) (o *types.Object, err error) { if !s.features.VirtualDir { - err = NewOperationNotImplementedError("create_dir") + err = types.NewOperationNotImplementedError("create_dir") return } @@ -180,14 +180,14 @@ func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCre o = s.newObject(true) o.Path = path o.ID = rp - o.Mode = ModeDir + o.Mode = types.ModeDir return } // metadataLinkTargetHeader is the name of the user-defined metadata name used to store the target. const metadataLinkTargetHeader = "x-qs-meta-bs-link-target" -func (s *Storage) createLink(ctx context.Context, path string, target string, opt pairStorageCreateLink) (o *Object, err error) { +func (s *Storage) createLink(ctx context.Context, path string, target string, opt pairStorageCreateLink) (o *types.Object, err error) { rt := s.getAbsPath(target) rp := s.getAbsPath(path) @@ -210,17 +210,17 @@ func (s *Storage) createLink(ctx context.Context, path string, target string, op if !s.features.VirtualLink { // The virtual link is not enabled, so we set the object mode to `ModeRead`. - o.Mode |= ModeRead + o.Mode |= types.ModeRead } else { // qingstor does not have an absolute path, so when we call `getAbsPath`, it will remove the prefix `/`. // To ensure that the path matches the one the user gets, we should re-add `/` here. o.SetLinkTarget("/" + rt) - o.Mode |= ModeLink + o.Mode |= types.ModeLink } return } -func (s *Storage) createMultipart(ctx context.Context, path string, opt pairStorageCreateMultipart) (o *Object, err error) { +func (s *Storage) createMultipart(ctx context.Context, path string, opt pairStorageCreateMultipart) (o *types.Object, err error) { input := &service.InitiateMultipartUploadInput{} if opt.HasEncryptionCustomerAlgorithm { input.XQSEncryptionCustomerAlgorithm, input.XQSEncryptionCustomerKey, input.XQSEncryptionCustomerKeyMD5, err = calculateEncryptionHeaders(opt.EncryptionCustomerAlgorithm, opt.EncryptionCustomerKey) @@ -239,7 +239,7 @@ func (s *Storage) createMultipart(ctx context.Context, path string, opt pairStor o = s.newObject(true) o.ID = rp o.Path = path - o.Mode |= ModePart + o.Mode |= types.ModePart o.SetMultipartID(*output.UploadID) return o, nil @@ -290,7 +290,7 @@ func (s *Storage) fetch(ctx context.Context, path string, url string, opt pairSt return err } -func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *ObjectIterator, err error) { +func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *types.ObjectIterator, err error) { input := &objectPageStatus{ limit: 200, prefix: s.getAbsPath(path), @@ -299,10 +299,10 @@ func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (o if !opt.HasListMode { // Support `ListModePrefix` as the default `ListMode`. // ref: [GSP-654](https://github.com/beyondstorage/go-storage/blob/master/docs/rfcs/654-unify-list-behavior.md) - opt.ListMode = ListModePrefix + opt.ListMode = types.ListModePrefix } - var nextFn NextObjectFunc + var nextFn types.NextObjectFunc switch { case opt.ListMode.IsPart(): @@ -316,21 +316,21 @@ func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (o return nil, services.ListModeInvalidError{Actual: opt.ListMode} } - return NewObjectIterator(ctx, nextFn, input), nil + return types.NewObjectIterator(ctx, nextFn, input), nil } -func (s *Storage) listMultipart(ctx context.Context, o *Object, opt pairStorageListMultipart) (pi *PartIterator, err error) { +func (s *Storage) listMultipart(ctx context.Context, o *types.Object, opt pairStorageListMultipart) (pi *types.PartIterator, err error) { input := &partPageStatus{ limit: 200, prefix: o.ID, uploadID: o.MustGetMultipartID(), } - return NewPartIterator(ctx, s.nextPartPage, input), nil + return types.NewPartIterator(ctx, s.nextPartPage, input), nil } -func (s *Storage) metadata(opt pairStorageMetadata) (meta *StorageMeta) { - meta = NewStorageMeta() +func (s *Storage) metadata(opt pairStorageMetadata) (meta *types.StorageMeta) { + meta = types.NewStorageMeta() meta.Name = *s.properties.BucketName meta.WorkDir = s.workDir meta.SetLocation(*s.properties.Zone) @@ -362,7 +362,7 @@ func (s *Storage) move(ctx context.Context, src string, dst string, opt pairStor return nil } -func (s *Storage) nextObjectPageByDir(ctx context.Context, page *ObjectPage) error { +func (s *Storage) nextObjectPageByDir(ctx context.Context, page *types.ObjectPage) error { input := page.Status.(*objectPageStatus) output, err := s.bucket.ListObjectsWithContext(ctx, &service.ListObjectsInput{ @@ -379,7 +379,7 @@ func (s *Storage) nextObjectPageByDir(ctx context.Context, page *ObjectPage) err o := s.newObject(true) o.ID = *v o.Path = s.getRelPath(*v) - o.Mode |= ModeDir + o.Mode |= types.ModeDir page.Data = append(page.Data, o) } @@ -398,20 +398,20 @@ func (s *Storage) nextObjectPageByDir(ctx context.Context, page *ObjectPage) err } if service.StringValue(output.NextMarker) == "" { - return IterateDone + return types.IterateDone } if !service.BoolValue(output.HasMore) { - return IterateDone + return types.IterateDone } if len(output.Keys) == 0 { - return IterateDone + return types.IterateDone } input.marker = *output.NextMarker return nil } -func (s *Storage) nextObjectPageByPrefix(ctx context.Context, page *ObjectPage) error { +func (s *Storage) nextObjectPageByPrefix(ctx context.Context, page *types.ObjectPage) error { input := page.Status.(*objectPageStatus) output, err := s.bucket.ListObjectsWithContext(ctx, &service.ListObjectsInput{ @@ -433,20 +433,20 @@ func (s *Storage) nextObjectPageByPrefix(ctx context.Context, page *ObjectPage) } if service.StringValue(output.NextMarker) == "" { - return IterateDone + return types.IterateDone } if !service.BoolValue(output.HasMore) { - return IterateDone + return types.IterateDone } if len(output.Keys) == 0 { - return IterateDone + return types.IterateDone } input.marker = *output.NextMarker return nil } -func (s *Storage) nextPartObjectPageByPrefix(ctx context.Context, page *ObjectPage) error { +func (s *Storage) nextPartObjectPageByPrefix(ctx context.Context, page *types.ObjectPage) error { input := page.Status.(*objectPageStatus) output, err := s.bucket.ListMultipartUploadsWithContext(ctx, &service.ListMultipartUploadsInput{ @@ -463,7 +463,7 @@ func (s *Storage) nextPartObjectPageByPrefix(ctx context.Context, page *ObjectPa o := s.newObject(true) o.ID = *v.Key o.Path = s.getRelPath(*v.Key) - o.Mode |= ModePart + o.Mode |= types.ModePart o.SetMultipartID(*v.UploadID) page.Data = append(page.Data, o) @@ -473,10 +473,10 @@ func (s *Storage) nextPartObjectPageByPrefix(ctx context.Context, page *ObjectPa nextUploadIDMarker := service.StringValue(output.NextUploadIDMarker) if nextKeyMarker == "" && nextUploadIDMarker == "" { - return IterateDone + return types.IterateDone } if !service.BoolValue(output.HasMore) { - return IterateDone + return types.IterateDone } input.marker = nextKeyMarker @@ -484,7 +484,7 @@ func (s *Storage) nextPartObjectPageByPrefix(ctx context.Context, page *ObjectPa return nil } -func (s *Storage) nextPartPage(ctx context.Context, page *PartPage) error { +func (s *Storage) nextPartPage(ctx context.Context, page *types.PartPage) error { input := page.Status.(*partPageStatus) output, err := s.bucket.ListMultipartWithContext(ctx, input.prefix, &service.ListMultipartInput{ @@ -497,7 +497,7 @@ func (s *Storage) nextPartPage(ctx context.Context, page *PartPage) error { } for _, v := range output.ObjectParts { - p := &Part{ + p := &types.Part{ Index: *v.PartNumber, Size: *v.Size, ETag: service.StringValue(v.Etag), @@ -509,7 +509,7 @@ func (s *Storage) nextPartPage(ctx context.Context, page *PartPage) error { // FIXME: QingStor ListMulitpart API looks like buggy. offset := input.partNumberMarker + len(output.ObjectParts) if offset >= service.IntValue(output.Count) { - return IterateDone + return types.IterateDone } input.partNumberMarker = offset @@ -580,27 +580,6 @@ func (s *Storage) querySignHTTPWrite(ctx context.Context, path string, size int6 return r.HTTPRequest, nil } -func (s *Storage) reach(ctx context.Context, path string, opt pairStorageReach) (url string, err error) { - // FIXME: sdk should export GetObjectRequest as interface too? - bucket := s.bucket.(*service.Bucket) - - rp := s.getAbsPath(path) - - r, _, err := bucket.GetObjectRequest(rp, nil) - if err != nil { - return - } - if err = r.BuildWithContext(ctx); err != nil { - return - } - - expire := opt.Expire - if err = r.SignQuery(int(expire.Seconds())); err != nil { - return - } - return r.HTTPRequest.URL.String(), nil -} - func (s *Storage) read(ctx context.Context, path string, w io.Writer, opt pairStorageRead) (n int64, err error) { input, err := s.formatGetObjectInput(opt) if err != nil { @@ -623,7 +602,7 @@ func (s *Storage) read(ctx context.Context, path string, w io.Writer, opt pairSt return io.Copy(w, rc) } -func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *Object, err error) { +func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *types.Object, err error) { rp := s.getAbsPath(path) @@ -640,7 +619,7 @@ func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o o = s.newObject(true) o.ID = rp o.Path = path - o.Mode |= ModePart + o.Mode |= types.ModePart o.SetMultipartID(opt.MultipartID) return o, nil } @@ -671,21 +650,21 @@ func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o // The path is a symlink object. if !s.features.VirtualLink { // The virtual link is not enabled, so we set the object mode to `ModeRead`. - o.Mode |= ModeRead + o.Mode |= types.ModeRead } else { // qingstor does not have an absolute path, so when we call `getAbsPath`, it will remove the prefix `/`. // To ensure that the path matches the one the user gets, we should re-add `/` here. o.SetLinkTarget("/" + v) - o.Mode |= ModeLink + o.Mode |= types.ModeLink } } } - if o.Mode&ModeLink == 0 && o.Mode&ModeRead == 0 { + if o.Mode&types.ModeLink == 0 && o.Mode&types.ModeRead == 0 { if opt.HasObjectMode && opt.ObjectMode.IsDir() { - o.Mode |= ModeDir + o.Mode |= types.ModeDir } else { - o.Mode |= ModeRead + o.Mode |= types.ModeRead } } @@ -742,7 +721,7 @@ func (s *Storage) write(ctx context.Context, path string, r io.Reader, size int6 return size, nil } -func (s *Storage) writeAppend(ctx context.Context, o *Object, r io.Reader, size int64, opt pairStorageWriteAppend) (n int64, err error) { +func (s *Storage) writeAppend(ctx context.Context, o *types.Object, r io.Reader, size int64, opt pairStorageWriteAppend) (n int64, err error) { if size > appendSizeMaximum { err = fmt.Errorf("size limit exceeded: %w", services.ErrRestrictionDissatisfied) return @@ -779,7 +758,7 @@ func (s *Storage) writeAppend(ctx context.Context, o *Object, r io.Reader, size return size, nil } -func (s *Storage) writeMultipart(ctx context.Context, o *Object, r io.Reader, size int64, index int, opt pairStorageWriteMultipart) (n int64, part *Part, err error) { +func (s *Storage) writeMultipart(ctx context.Context, o *types.Object, r io.Reader, size int64, index int, opt pairStorageWriteMultipart) (n int64, part *types.Part, err error) { if index < multipartNumberMinimum || index > multipartNumberMaximum { err = ErrPartNumberInvalid return @@ -811,7 +790,7 @@ func (s *Storage) writeMultipart(ctx context.Context, o *Object, r io.Reader, si return } - part = &Part{ + part = &types.Part{ Index: index, Size: size, ETag: service.StringValue(output.ETag), diff --git a/services/qingstor/storager_test.go b/services/qingstor/storager_test.go index f9704e3cb..3402572a6 100644 --- a/services/qingstor/storager_test.go +++ b/services/qingstor/storager_test.go @@ -17,7 +17,7 @@ import ( "go.beyondstorage.io/v5/pairs" "go.beyondstorage.io/v5/pkg/randbytes" "go.beyondstorage.io/v5/services" - . "go.beyondstorage.io/v5/types" + "go.beyondstorage.io/v5/types" ) func TestStorage_String(t *testing.T) { @@ -174,7 +174,7 @@ func TestStorage_ListPrefix(t *testing.T) { bucket: mockBucket, } - it, err := client.List(path, pairs.WithListMode(ListModePrefix)) + it, err := client.List(path, pairs.WithListMode(types.ListModePrefix)) if err != nil { t.Error(err) } @@ -321,7 +321,7 @@ func TestStorage_Stat(t *testing.T) { } else { assert.NoError(t, err) assert.NotNil(t, o) - assert.Equal(t, ModeRead, o.Mode) + assert.Equal(t, types.ModeRead, o.Mode) assert.Equal(t, int64(100), o.MustGetContentLength()) contentType, ok := o.GetContentType() assert.True(t, ok) @@ -540,7 +540,7 @@ func TestStorage_Create(t *testing.T) { }).Times(1) for _, tt := range cases { - ps := make([]Pair, 0) + ps := make([]types.Pair, 0) if tt.multipartID != "" { ps = append(ps, pairs.WithMultipartID(tt.multipartID)) } @@ -550,9 +550,9 @@ func TestStorage_Create(t *testing.T) { assert.Equal(t, tt.path, obj.Path) if tt.multipartID != "" { assert.Equal(t, tt.multipartID, obj.MustGetMultipartID()) - assert.Equal(t, ModePart, obj.Mode) + assert.Equal(t, types.ModePart, obj.Mode) } else { - assert.Equal(t, ModeRead, obj.Mode) + assert.Equal(t, types.ModeRead, obj.Mode) assert.Panics(t, func() { obj.MustGetMultipartID() }) diff --git a/services/qingstor/utils.go b/services/qingstor/utils.go index d48c47102..271f364f6 100644 --- a/services/qingstor/utils.go +++ b/services/qingstor/utils.go @@ -64,7 +64,6 @@ type Storage struct { typ.UnimplementedFetcher typ.UnimplementedMover typ.UnimplementedMultiparter - typ.UnimplementedReacher typ.UnimplementedAppender typ.UnimplementedDirer typ.UnimplementedLinker diff --git a/services/s3/service.go b/services/s3/service.go index a674c2b46..a1b13cafb 100644 --- a/services/s3/service.go +++ b/services/s3/service.go @@ -2,14 +2,16 @@ package s3 import ( "context" + "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/s3" s3types "github.com/aws/aws-sdk-go-v2/service/s3/types" + ps "go.beyondstorage.io/v5/pairs" - . "go.beyondstorage.io/v5/types" + "go.beyondstorage.io/v5/types" ) -func (s *Service) create(ctx context.Context, name string, opt pairServiceCreate) (store Storager, err error) { +func (s *Service) create(ctx context.Context, name string, opt pairServiceCreate) (store types.Storager, err error) { pairs := append(opt.pairs, ps.WithName(name)) st, err := s.newStorage(pairs...) if err != nil { @@ -42,7 +44,7 @@ func (s *Service) delete(ctx context.Context, name string, opt pairServiceDelete return } -func (s *Service) get(ctx context.Context, name string, opt pairServiceGet) (store Storager, err error) { +func (s *Service) get(ctx context.Context, name string, opt pairServiceGet) (store types.Storager, err error) { pairs := append(opt.pairs, ps.WithName(name)) st, err := s.newStorage(pairs...) if err != nil { @@ -51,12 +53,12 @@ func (s *Service) get(ctx context.Context, name string, opt pairServiceGet) (sto return st, nil } -func (s *Service) list(ctx context.Context, opt pairServiceList) (it *StoragerIterator, err error) { +func (s *Service) list(ctx context.Context, opt pairServiceList) (it *types.StoragerIterator, err error) { input := &storagePageStatus{} - return NewStoragerIterator(ctx, s.nextStoragePage, input), nil + return types.NewStoragerIterator(ctx, s.nextStoragePage, input), nil } -func (s *Service) nextStoragePage(ctx context.Context, page *StoragerPage) error { +func (s *Service) nextStoragePage(ctx context.Context, page *types.StoragerPage) error { output, err := s.service.ListBuckets(ctx, &s3.ListBucketsInput{}) if err != nil { return err @@ -68,5 +70,5 @@ func (s *Service) nextStoragePage(ctx context.Context, page *StoragerPage) error } page.Data = append(page.Data, store) } - return IterateDone + return types.IterateDone } diff --git a/services/s3/storage.go b/services/s3/storage.go index e199f5cbc..0050d00de 100644 --- a/services/s3/storage.go +++ b/services/s3/storage.go @@ -16,28 +16,28 @@ import ( ps "go.beyondstorage.io/v5/pairs" "go.beyondstorage.io/v5/pkg/iowrap" "go.beyondstorage.io/v5/services" - . "go.beyondstorage.io/v5/types" + "go.beyondstorage.io/v5/types" ) -func (s *Storage) completeMultipart(ctx context.Context, o *Object, parts []*Part, opt pairStorageCompleteMultipart) (err error) { +func (s *Storage) completeMultipart(ctx context.Context, o *types.Object, parts []*types.Part, opt pairStorageCompleteMultipart) (err error) { input := s.formatCompleteMultipartUploadInput(o, parts, opt) _, err = s.service.CompleteMultipartUpload(ctx, input) if err != nil { return } - o.Mode.Del(ModePart) - o.Mode.Add(ModeRead) + o.Mode.Del(types.ModePart) + o.Mode.Add(types.ModeRead) return } -func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { +func (s *Storage) create(path string, opt pairStorageCreate) (o *types.Object) { rp := s.getAbsPath(path) // Handle create multipart object separately. if opt.HasMultipartID { o = s.newObject(true) - o.Mode = ModePart + o.Mode = types.ModePart o.SetMultipartID(opt.MultipartID) } else { if opt.HasObjectMode && opt.ObjectMode.IsDir() { @@ -47,10 +47,10 @@ func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { rp += "/" o = s.newObject(true) - o.Mode = ModeDir + o.Mode = types.ModeDir } else { o = s.newObject(false) - o.Mode = ModeRead + o.Mode = types.ModeRead } } o.ID = rp @@ -58,9 +58,9 @@ func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { return o } -func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCreateDir) (o *Object, err error) { +func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCreateDir) (o *types.Object, err error) { if !s.features.VirtualDir { - err = NewOperationNotImplementedError("create_dir") + err = types.NewOperationNotImplementedError("create_dir") return } @@ -86,7 +86,7 @@ func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCre return } o = s.newObject(true) - o.Mode = ModeDir + o.Mode = types.ModeDir o.ID = rp o.Path = path o.SetEtag(aws.ToString(output.ETag)) @@ -114,7 +114,7 @@ func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCre // metadataLinkTargetHeader is the name of the user-defined metadata name used to store the link target. const metadataLinkTargetHeader = "x-amz-meta-bs-link-target" -func (s *Storage) createLink(ctx context.Context, path string, target string, opt pairStorageCreateLink) (o *Object, err error) { +func (s *Storage) createLink(ctx context.Context, path string, target string, opt pairStorageCreateLink) (o *types.Object, err error) { rt := s.getAbsPath(target) rp := s.getAbsPath(path) @@ -138,12 +138,12 @@ func (s *Storage) createLink(ctx context.Context, path string, target string, op if !s.features.VirtualLink { // The virtual link is not enabled, so we set the object mode to `ModeRead`. - o.Mode |= ModeRead + o.Mode |= types.ModeRead } else { // s3 does not have an absolute path, so when we call `getAbsPath`, it will remove the prefix `/`. // To ensure that the path matches the one the user gets, we should re-add `/` here. o.SetLinkTarget("/" + rt) - o.Mode |= ModeLink + o.Mode |= types.ModeLink } var sm ObjectSystemMetadata @@ -168,7 +168,7 @@ func (s *Storage) createLink(ctx context.Context, path string, target string, op return } -func (s *Storage) createMultipart(ctx context.Context, path string, opt pairStorageCreateMultipart) (o *Object, err error) { +func (s *Storage) createMultipart(ctx context.Context, path string, opt pairStorageCreateMultipart) (o *types.Object, err error) { rp := s.getAbsPath(path) input, err := s.formatCreateMultipartUploadInput(path, opt) @@ -183,7 +183,7 @@ func (s *Storage) createMultipart(ctx context.Context, path string, opt pairStor o = s.newObject(true) o.ID = rp o.Path = path - o.Mode |= ModePart + o.Mode |= types.ModePart o.SetMultipartID(aws.ToString(output.UploadId)) var sm ObjectSystemMetadata //output.ServerSideEncryption's type is s3types.ServerSideEncryption, which is equivalent to string @@ -243,7 +243,7 @@ func (s *Storage) delete(ctx context.Context, path string, opt pairStorageDelete return nil } -func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *ObjectIterator, err error) { +func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *types.ObjectIterator, err error) { input := &objectPageStatus{ maxKeys: 200, prefix: s.getAbsPath(path), @@ -256,10 +256,10 @@ func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (o if !opt.HasListMode { // Support `ListModePrefix` as the default `ListMode`. // ref: [GSP-46](https://github.com/beyondstorage/go-storage/blob/master/docs/rfcs/654-unify-list-behavior.md) - opt.ListMode = ListModePrefix + opt.ListMode = types.ListModePrefix } - var nextFn NextObjectFunc + var nextFn types.NextObjectFunc switch { case opt.ListMode.IsPart(): @@ -273,10 +273,10 @@ func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (o return nil, services.ListModeInvalidError{Actual: opt.ListMode} } - return NewObjectIterator(ctx, nextFn, input), nil + return types.NewObjectIterator(ctx, nextFn, input), nil } -func (s *Storage) listMultipart(ctx context.Context, o *Object, opt pairStorageListMultipart) (pi *PartIterator, err error) { +func (s *Storage) listMultipart(ctx context.Context, o *types.Object, opt pairStorageListMultipart) (pi *types.PartIterator, err error) { input := &partPageStatus{ maxParts: 200, key: o.ID, @@ -286,11 +286,11 @@ func (s *Storage) listMultipart(ctx context.Context, o *Object, opt pairStorageL input.expectedBucketOwner = opt.ExceptedBucketOwner } - return NewPartIterator(ctx, s.nextPartPage, input), nil + return types.NewPartIterator(ctx, s.nextPartPage, input), nil } -func (s *Storage) metadata(opt pairStorageMetadata) (meta *StorageMeta) { - meta = NewStorageMeta() +func (s *Storage) metadata(opt pairStorageMetadata) (meta *types.StorageMeta) { + meta = types.NewStorageMeta() meta.Name = s.name meta.WorkDir = s.workDir // set write restriction @@ -302,7 +302,7 @@ func (s *Storage) metadata(opt pairStorageMetadata) (meta *StorageMeta) { return meta } -func (s *Storage) nextObjectPageByDir(ctx context.Context, page *ObjectPage) error { +func (s *Storage) nextObjectPageByDir(ctx context.Context, page *types.ObjectPage) error { input := page.Status.(*objectPageStatus) listInput := &s3.ListObjectsV2Input{ @@ -324,7 +324,7 @@ func (s *Storage) nextObjectPageByDir(ctx context.Context, page *ObjectPage) err o := s.newObject(true) o.ID = *v.Prefix o.Path = s.getRelPath(*v.Prefix) - o.Mode |= ModeDir + o.Mode |= types.ModeDir page.Data = append(page.Data, o) } @@ -339,14 +339,14 @@ func (s *Storage) nextObjectPageByDir(ctx context.Context, page *ObjectPage) err } if !output.IsTruncated { - return IterateDone + return types.IterateDone } input.continuationToken = *output.NextContinuationToken return nil } -func (s *Storage) nextObjectPageByPrefix(ctx context.Context, page *ObjectPage) error { +func (s *Storage) nextObjectPageByPrefix(ctx context.Context, page *types.ObjectPage) error { input := page.Status.(*objectPageStatus) listInput := &s3.ListObjectsV2Input{ @@ -372,13 +372,13 @@ func (s *Storage) nextObjectPageByPrefix(ctx context.Context, page *ObjectPage) page.Data = append(page.Data, o) } if !output.IsTruncated { - return IterateDone + return types.IterateDone } input.continuationToken = aws.ToString(output.NextContinuationToken) return nil } -func (s *Storage) nextPartObjectPageByPrefix(ctx context.Context, page *ObjectPage) error { +func (s *Storage) nextPartObjectPageByPrefix(ctx context.Context, page *types.ObjectPage) error { input := page.Status.(*objectPageStatus) listInput := &s3.ListMultipartUploadsInput{ Bucket: &s.name, @@ -399,20 +399,20 @@ func (s *Storage) nextPartObjectPageByPrefix(ctx context.Context, page *ObjectPa o := s.newObject(true) o.ID = *v.Key o.Path = s.getRelPath(*v.Key) - o.Mode |= ModePart + o.Mode |= types.ModePart o.SetMultipartID(*v.UploadId) page.Data = append(page.Data, o) } if !output.IsTruncated { - return IterateDone + return types.IterateDone } input.keyMarker = aws.ToString(output.KeyMarker) input.uploadIdMarker = aws.ToString(output.UploadIdMarker) return nil } -func (s *Storage) nextPartPage(ctx context.Context, page *PartPage) error { +func (s *Storage) nextPartPage(ctx context.Context, page *types.PartPage) error { input := page.Status.(*partPageStatus) listInput := &s3.ListPartsInput{ Bucket: &s.name, @@ -430,7 +430,7 @@ func (s *Storage) nextPartPage(ctx context.Context, page *PartPage) error { } for _, v := range output.Parts { - p := &Part{ + p := &types.Part{ // The returned `PartNumber` is [1, 10000]. // Set Index=*v.PartNumber-1 here to make the `PartNumber` zero-based for user. Index: int(v.PartNumber) - 1, @@ -441,13 +441,13 @@ func (s *Storage) nextPartPage(ctx context.Context, page *PartPage) error { page.Data = append(page.Data, p) } if !output.IsTruncated { - return IterateDone + return types.IterateDone } input.partNumberMarker = aws.ToString(output.NextPartNumberMarker) return nil } -func (s *Storage) querySignHTTPCompleteMultipart(ctx context.Context, o *Object, parts []*Part, expire time.Duration, opt pairStorageQuerySignHTTPCompleteMultipart) (req *http.Request, err error) { +func (s *Storage) querySignHTTPCompleteMultipart(ctx context.Context, o *types.Object, parts []*types.Part, expire time.Duration, opt pairStorageQuerySignHTTPCompleteMultipart) (req *http.Request, err error) { // Currently presign only support Get/Put/Head object & UploadPart // We don't support querySignHTTPCompleteMultipart for now @@ -466,7 +466,7 @@ func (s *Storage) querySignHTTPDelete(ctx context.Context, path string, expire t return nil, services.ErrCapabilityInsufficient } -func (s *Storage) querySignHTTPListMultipart(ctx context.Context, o *Object, expire time.Duration, opt pairStorageQuerySignHTTPListMultipart) (req *http.Request, err error) { +func (s *Storage) querySignHTTPListMultipart(ctx context.Context, o *types.Object, expire time.Duration, opt pairStorageQuerySignHTTPListMultipart) (req *http.Request, err error) { // Currently presign only support Get/Put/Head object & UploadPart // We don't support querySignHTTPListMultipart for now return nil, services.ErrCapabilityInsufficient @@ -523,7 +523,7 @@ func (s *Storage) querySignHTTPWrite(ctx context.Context, path string, size int6 return } -func (s *Storage) querySignHTTPWriteMultipart(ctx context.Context, o *Object, size int64, index int, expire time.Duration, opt pairStorageQuerySignHTTPWriteMultipart) (req *http.Request, err error) { +func (s *Storage) querySignHTTPWriteMultipart(ctx context.Context, o *types.Object, size int64, index int, expire time.Duration, opt pairStorageQuerySignHTTPWriteMultipart) (req *http.Request, err error) { pairs, err := s.parsePairStorageWriteMultipart(opt.pairs) if err != nil { return nil, err @@ -569,7 +569,7 @@ func (s *Storage) read(ctx context.Context, path string, w io.Writer, opt pairSt return io.Copy(w, rc) } -func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *Object, err error) { +func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *types.Object, err error) { rp := s.getAbsPath(path) if opt.HasMultipartID { @@ -589,7 +589,7 @@ func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o o = s.newObject(true) o.ID = rp o.Path = path - o.Mode.Add(ModePart) + o.Mode.Add(types.ModePart) o.SetMultipartID(opt.MultipartID) return o, nil } @@ -632,9 +632,9 @@ func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o // The path is a symlink object. if !s.features.VirtualLink { // The virtual link is not enabled, so we set the object mode to `ModeRead`. - o.Mode |= ModeRead + o.Mode |= types.ModeRead } else { - o.Mode |= ModeLink + o.Mode |= types.ModeLink // s3 does not have an absolute path, so when we call `getAbsPath`, it will remove the prefix `/`. // To ensure that the path matches the one the user gets, we should re-add `/` here. o.SetLinkTarget("/" + target) @@ -642,11 +642,11 @@ func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o } } - if o.Mode&ModeLink == 0 && o.Mode&ModeRead == 0 { + if o.Mode&types.ModeLink == 0 && o.Mode&types.ModeRead == 0 { if opt.HasObjectMode && opt.ObjectMode.IsDir() { - o.Mode |= ModeDir + o.Mode |= types.ModeDir } else { - o.Mode |= ModeRead + o.Mode |= types.ModeRead } } o.SetContentLength(output.ContentLength) @@ -713,7 +713,7 @@ func (s *Storage) write(ctx context.Context, path string, r io.Reader, size int6 return size, nil } -func (s *Storage) writeMultipart(ctx context.Context, o *Object, r io.Reader, size int64, index int, opt pairStorageWriteMultipart) (n int64, part *Part, err error) { +func (s *Storage) writeMultipart(ctx context.Context, o *types.Object, r io.Reader, size int64, index int, opt pairStorageWriteMultipart) (n int64, part *types.Part, err error) { if size > multipartSizeMaximum { err = fmt.Errorf("size limit exceeded: %w", services.ErrRestrictionDissatisfied) return @@ -752,7 +752,7 @@ func (s *Storage) writeMultipart(ctx context.Context, o *Object, r io.Reader, si return } - part = &Part{ + part = &types.Part{ Index: index, Size: size, ETag: aws.ToString(output.ETag), diff --git a/services/storj/storage.go b/services/storj/storage.go index 3d5e6e1f7..c3362c220 100644 --- a/services/storj/storage.go +++ b/services/storj/storage.go @@ -9,17 +9,17 @@ import ( "go.beyondstorage.io/v5/pkg/iowrap" "go.beyondstorage.io/v5/services" - . "go.beyondstorage.io/v5/types" + "go.beyondstorage.io/v5/types" ) -func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { +func (s *Storage) create(path string, opt pairStorageCreate) (o *types.Object) { if opt.HasObjectMode && opt.ObjectMode.IsDir() { path += "/" - o = NewObject(s, true) - o.Mode = ModeDir + o = types.NewObject(s, true) + o.Mode = types.ModeDir } else { - o = NewObject(s, false) - o.Mode = ModeRead + o = types.NewObject(s, false) + o.Mode = types.ModeRead } o.ID = s.getAbsPath(path) o.Path = path @@ -33,37 +33,37 @@ func (s *Storage) delete(ctx context.Context, path string, opt pairStorageDelete return err } -func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *ObjectIterator, err error) { +func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *types.ObjectIterator, err error) { rp := s.getAbsPath(path) if !opt.HasListMode || opt.ListMode.IsDir() { - nextFn := func(ctx context.Context, page *ObjectPage) error { + nextFn := func(ctx context.Context, page *types.ObjectPage) error { options := uplink.ListObjectsOptions{Prefix: rp, System: true} dirObject := s.project.ListObjects(ctx, s.name, &options) for dirObject.Next() { if dirObject.Item().Key == rp { continue } - o := NewObject(s, true) + o := types.NewObject(s, true) o.Path = dirObject.Item().Key[len(rp):] if dirObject.Item().IsPrefix { - o.Mode |= ModeDir + o.Mode |= types.ModeDir } else { - o.Mode |= ModeRead + o.Mode |= types.ModeRead } o.SetContentLength(dirObject.Item().System.ContentLength) page.Data = append(page.Data, o) } - return IterateDone + return types.IterateDone } - oi = NewObjectIterator(ctx, nextFn, nil) + oi = types.NewObjectIterator(ctx, nextFn, nil) return oi, err } else { return nil, services.ListModeInvalidError{Actual: opt.ListMode} } } -func (s *Storage) metadata(opt pairStorageMetadata) (meta *StorageMeta) { - meta = NewStorageMeta() +func (s *Storage) metadata(opt pairStorageMetadata) (meta *types.StorageMeta) { + meta = types.NewStorageMeta() meta.WorkDir = s.workDir meta.Name = s.name return meta @@ -96,18 +96,18 @@ func (s *Storage) read(ctx context.Context, path string, w io.Writer, opt pairSt return n, err } -func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *Object, err error) { +func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *types.Object, err error) { rp := s.getAbsPath(path) object, err := s.project.StatObject(ctx, s.name, rp) if err != nil { return nil, services.ErrObjectNotExist } - o = NewObject(s, true) + o = types.NewObject(s, true) o.Path = path if object.IsPrefix { - o.Mode |= ModeDir + o.Mode |= types.ModeDir } else { - o.Mode |= ModeRead + o.Mode |= types.ModeRead } o.SetContentLength(object.System.ContentLength) o.SetSystemMetadata(object.System) diff --git a/services/tar/storage.go b/services/tar/storage.go index efa81ea25..3dc20118e 100644 --- a/services/tar/storage.go +++ b/services/tar/storage.go @@ -5,10 +5,10 @@ import ( "io" "go.beyondstorage.io/v5/services" - . "go.beyondstorage.io/v5/types" + "go.beyondstorage.io/v5/types" ) -func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { +func (s *Storage) create(path string, opt pairStorageCreate) (o *types.Object) { panic("not implemented") } @@ -16,17 +16,17 @@ func (s *Storage) delete(ctx context.Context, path string, opt pairStorageDelete panic("not implemented") } -func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *ObjectIterator, err error) { - return NewObjectIterator(ctx, s.nextObjectPageByPrefix, nil), nil +func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *types.ObjectIterator, err error) { + return types.NewObjectIterator(ctx, s.nextObjectPageByPrefix, nil), nil } -func (s *Storage) metadata(opt pairStorageMetadata) (meta *StorageMeta) { +func (s *Storage) metadata(opt pairStorageMetadata) (meta *types.StorageMeta) { panic("not implemented") } -func (s *Storage) nextObjectPageByPrefix(ctx context.Context, page *ObjectPage) error { +func (s *Storage) nextObjectPageByPrefix(ctx context.Context, page *types.ObjectPage) error { page.Data = s.objects - return IterateDone + return types.IterateDone } func (s *Storage) read(ctx context.Context, path string, w io.Writer, opt pairStorageRead) (n int64, err error) { @@ -44,7 +44,7 @@ func (s *Storage) read(ctx context.Context, path string, w io.Writer, opt pairSt return io.CopyN(w, s.f, s.objects[idx].MustGetContentLength()) } -func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *Object, err error) { +func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *types.Object, err error) { idx, ok := s.objectsIndex[path] if !ok { return nil, services.ErrObjectNotExist diff --git a/services/us3/storage.go b/services/us3/storage.go index 62ee10cde..5c88a605e 100644 --- a/services/us3/storage.go +++ b/services/us3/storage.go @@ -4,10 +4,10 @@ import ( "context" "io" - . "go.beyondstorage.io/v5/types" + "go.beyondstorage.io/v5/types" ) -func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { +func (s *Storage) create(path string, opt pairStorageCreate) (o *types.Object) { panic("not implemented") } @@ -15,11 +15,11 @@ func (s *Storage) delete(ctx context.Context, path string, opt pairStorageDelete panic("not implemented") } -func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *ObjectIterator, err error) { +func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *types.ObjectIterator, err error) { panic("not implemented") } -func (s *Storage) metadata(opt pairStorageMetadata) (meta *StorageMeta) { +func (s *Storage) metadata(opt pairStorageMetadata) (meta *types.StorageMeta) { panic("not implemented") } @@ -27,7 +27,7 @@ func (s *Storage) read(ctx context.Context, path string, w io.Writer, opt pairSt panic("not implemented") } -func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *Object, err error) { +func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *types.Object, err error) { panic("not implemented") } diff --git a/services/uss/storage.go b/services/uss/storage.go index d3ea22849..0d990c260 100644 --- a/services/uss/storage.go +++ b/services/uss/storage.go @@ -11,7 +11,7 @@ import ( "go.beyondstorage.io/v5/pkg/headers" "go.beyondstorage.io/v5/pkg/iowrap" "go.beyondstorage.io/v5/services" - . "go.beyondstorage.io/v5/types" + "go.beyondstorage.io/v5/types" ) const ( @@ -24,13 +24,13 @@ const ( iterEnd = "g2gCZAAEbmV4dGQAA2VvZg" ) -func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { +func (s *Storage) create(path string, opt pairStorageCreate) (o *types.Object) { if opt.HasObjectMode && opt.ObjectMode.IsDir() { o = s.newObject(true) - o.Mode = ModeDir + o.Mode = types.ModeDir } else { o = s.newObject(false) - o.Mode = ModeRead + o.Mode = types.ModeRead } o.ID = s.getAbsPath(path) @@ -38,7 +38,7 @@ func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { return o } -func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCreateDir) (o *Object, err error) { +func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCreateDir) (o *types.Object, err error) { rp := s.getAbsPath(path) err = s.bucket.Mkdir(rp) @@ -51,7 +51,7 @@ func (s *Storage) createDir(ctx context.Context, path string, opt pairStorageCre } o = s.newObject(false) - o.Mode = ModeDir + o.Mode = types.ModeDir o.ID = rp o.Path = path return o, nil @@ -86,7 +86,7 @@ func (s *Storage) delete(ctx context.Context, path string, opt pairStorageDelete return } -func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *ObjectIterator, err error) { +func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *types.ObjectIterator, err error) { input := &objectPageStatus{ // 50 is the recommended value in SDK // see more details at: https://github.com/upyun/go-sdk/blob/master/upyun/rest.go#L560 @@ -100,10 +100,10 @@ func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (o if !opt.HasListMode { // Support `ListModePrefix` as the default `ListMode`. // ref: [GSP-654](https://github.com/beyondstorage/go-storage/blob/master/docs/rfcs/654-unify-list-behavior.md) - opt.ListMode = ListModePrefix + opt.ListMode = types.ListModePrefix } - var nextFn NextObjectFunc + var nextFn types.NextObjectFunc switch { case opt.ListMode.IsDir(): @@ -114,17 +114,17 @@ func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (o return nil, services.ListModeInvalidError{Actual: opt.ListMode} } - return NewObjectIterator(ctx, nextFn, input), nil + return types.NewObjectIterator(ctx, nextFn, input), nil } -func (s *Storage) metadata(opt pairStorageMetadata) (meta *StorageMeta) { - meta = NewStorageMeta() +func (s *Storage) metadata(opt pairStorageMetadata) (meta *types.StorageMeta) { + meta = types.NewStorageMeta() meta.Name = s.name meta.WorkDir = s.workDir return meta } -func (s *Storage) nextObjectPageByDir(ctx context.Context, page *ObjectPage) (err error) { +func (s *Storage) nextObjectPageByDir(ctx context.Context, page *types.ObjectPage) (err error) { input := page.Status.(*objectPageStatus) header := make(map[string]string) @@ -155,7 +155,7 @@ func (s *Storage) nextObjectPageByDir(ctx context.Context, page *ObjectPage) (er o := s.newObject(true) o.ID = v.Name o.Path = s.getRelPath(v.Name) - o.Mode |= ModeDir + o.Mode |= types.ModeDir // v.Meta means all the k-v in header with key which has prefix `x-upyun-meta-` // so we consider it as user's metadata // see more details at: https://github.com/upyun/go-sdk/blob/master/upyun/fileinfo.go#L39 @@ -174,14 +174,14 @@ func (s *Storage) nextObjectPageByDir(ctx context.Context, page *ObjectPage) (er } if header[headerListIter] == iterEnd { - return IterateDone + return types.IterateDone } input.iter = header[headerListIter] return nil } -func (s *Storage) nextObjectPageByPrefix(ctx context.Context, page *ObjectPage) (err error) { +func (s *Storage) nextObjectPageByPrefix(ctx context.Context, page *types.ObjectPage) (err error) { input := page.Status.(*objectPageStatus) header := make(map[string]string) @@ -221,7 +221,7 @@ func (s *Storage) nextObjectPageByPrefix(ctx context.Context, page *ObjectPage) } if header[headerListIter] == iterEnd { - return IterateDone + return types.IterateDone } input.iter = header[headerListIter] @@ -249,7 +249,7 @@ func (s *Storage) read(ctx context.Context, path string, w io.Writer, opt pairSt return f.Size, nil } -func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *Object, err error) { +func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *types.Object, err error) { rp := s.getAbsPath(path) output, err := s.bucket.GetInfo(rp) diff --git a/services/webdav/storage.go b/services/webdav/storage.go index f6139afe9..d499d63cb 100644 --- a/services/webdav/storage.go +++ b/services/webdav/storage.go @@ -4,10 +4,10 @@ import ( "context" "io" - . "go.beyondstorage.io/v5/types" + "go.beyondstorage.io/v5/types" ) -func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { +func (s *Storage) create(path string, opt pairStorageCreate) (o *types.Object) { panic("not implemented") } @@ -15,11 +15,11 @@ func (s *Storage) delete(ctx context.Context, path string, opt pairStorageDelete panic("not implemented") } -func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *ObjectIterator, err error) { +func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *types.ObjectIterator, err error) { panic("not implemented") } -func (s *Storage) metadata(opt pairStorageMetadata) (meta *StorageMeta) { +func (s *Storage) metadata(opt pairStorageMetadata) (meta *types.StorageMeta) { panic("not implemented") } @@ -27,7 +27,7 @@ func (s *Storage) read(ctx context.Context, path string, w io.Writer, opt pairSt panic("not implemented") } -func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *Object, err error) { +func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *types.Object, err error) { panic("not implemented") } diff --git a/services/zip/storage.go b/services/zip/storage.go index 959832fa8..e047a62ba 100644 --- a/services/zip/storage.go +++ b/services/zip/storage.go @@ -4,10 +4,10 @@ import ( "context" "io" - . "go.beyondstorage.io/v5/types" + "go.beyondstorage.io/v5/types" ) -func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) { +func (s *Storage) create(path string, opt pairStorageCreate) (o *types.Object) { panic("not implemented") } @@ -15,11 +15,11 @@ func (s *Storage) delete(ctx context.Context, path string, opt pairStorageDelete panic("not implemented") } -func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *ObjectIterator, err error) { +func (s *Storage) list(ctx context.Context, path string, opt pairStorageList) (oi *types.ObjectIterator, err error) { panic("not implemented") } -func (s *Storage) metadata(opt pairStorageMetadata) (meta *StorageMeta) { +func (s *Storage) metadata(opt pairStorageMetadata) (meta *types.StorageMeta) { panic("not implemented") } @@ -27,7 +27,7 @@ func (s *Storage) read(ctx context.Context, path string, w io.Writer, opt pairSt panic("not implemented") } -func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *Object, err error) { +func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o *types.Object, err error) { panic("not implemented") }