gcs.go - afero - [fork] go afero port for 9front
 (HTM) git clone https://git.drkhsh.at/afero.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       gcs.go (3897B)
       ---
            1 // Copyright © 2021 Vasily Ovchinnikov <vasily@remerge.io>.
            2 //
            3 // The code in this file is derived from afero fork github.com/Zatte/afero by Mikael Rapp
            4 // licensed under Apache License 2.0.
            5 //
            6 // Licensed under the Apache License, Version 2.0 (the "License");
            7 // you may not use this file except in compliance with the License.
            8 // You may obtain a copy of the License at
            9 // http://www.apache.org/licenses/LICENSE-2.0
           10 //
           11 // Unless required by applicable law or agreed to in writing, software
           12 // distributed under the License is distributed on an "AS IS" BASIS,
           13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
           14 // See the License for the specific language governing permissions and
           15 // limitations under the License.
           16 
           17 package gcsfs
           18 
           19 import (
           20         "context"
           21         "os"
           22         "time"
           23 
           24         "cloud.google.com/go/storage"
           25         "google.golang.org/api/option"
           26 
           27         "github.com/spf13/afero"
           28         "github.com/spf13/afero/gcsfs/internal/stiface"
           29 )
           30 
           31 type GcsFs struct {
           32         source *Fs
           33 }
           34 
           35 // NewGcsFS creates a GCS file system, automatically instantiating and decorating the storage client.
           36 // You can provide additional options to be passed to the client creation, as per
           37 // cloud.google.com/go/storage documentation
           38 func NewGcsFS(ctx context.Context, opts ...option.ClientOption) (afero.Fs, error) {
           39         if json := os.Getenv("GOOGLE_APPLICATION_CREDENTIALS_JSON"); json != "" {
           40                 opts = append(opts, option.WithCredentialsJSON([]byte(json)))
           41         }
           42         client, err := storage.NewClient(ctx, opts...)
           43         if err != nil {
           44                 return nil, err
           45         }
           46 
           47         return NewGcsFSFromClient(ctx, client)
           48 }
           49 
           50 // NewGcsFSWithSeparator is the same as NewGcsFS, but the files system will use the provided folder separator.
           51 func NewGcsFSWithSeparator(ctx context.Context, folderSeparator string, opts ...option.ClientOption) (afero.Fs, error) {
           52         client, err := storage.NewClient(ctx, opts...)
           53         if err != nil {
           54                 return nil, err
           55         }
           56 
           57         return NewGcsFSFromClientWithSeparator(ctx, client, folderSeparator)
           58 }
           59 
           60 // NewGcsFSFromClient creates a GCS file system from a given storage client
           61 func NewGcsFSFromClient(ctx context.Context, client *storage.Client) (afero.Fs, error) {
           62         c := stiface.AdaptClient(client)
           63 
           64         return &GcsFs{NewGcsFs(ctx, c)}, nil
           65 }
           66 
           67 // NewGcsFSFromClientWithSeparator is the same as NewGcsFSFromClient, but the file system will use the provided folder separator.
           68 func NewGcsFSFromClientWithSeparator(ctx context.Context, client *storage.Client, folderSeparator string) (afero.Fs, error) {
           69         c := stiface.AdaptClient(client)
           70 
           71         return &GcsFs{NewGcsFsWithSeparator(ctx, c, folderSeparator)}, nil
           72 }
           73 
           74 // Wraps gcs.GcsFs and convert some return types to afero interfaces.
           75 
           76 func (fs *GcsFs) Name() string {
           77         return fs.source.Name()
           78 }
           79 
           80 func (fs *GcsFs) Create(name string) (afero.File, error) {
           81         return fs.source.Create(name)
           82 }
           83 
           84 func (fs *GcsFs) Mkdir(name string, perm os.FileMode) error {
           85         return fs.source.Mkdir(name, perm)
           86 }
           87 
           88 func (fs *GcsFs) MkdirAll(path string, perm os.FileMode) error {
           89         return fs.source.MkdirAll(path, perm)
           90 }
           91 
           92 func (fs *GcsFs) Open(name string) (afero.File, error) {
           93         return fs.source.Open(name)
           94 }
           95 
           96 func (fs *GcsFs) OpenFile(name string, flag int, perm os.FileMode) (afero.File, error) {
           97         return fs.source.OpenFile(name, flag, perm)
           98 }
           99 
          100 func (fs *GcsFs) Remove(name string) error {
          101         return fs.source.Remove(name)
          102 }
          103 
          104 func (fs *GcsFs) RemoveAll(path string) error {
          105         return fs.source.RemoveAll(path)
          106 }
          107 
          108 func (fs *GcsFs) Rename(oldname, newname string) error {
          109         return fs.source.Rename(oldname, newname)
          110 }
          111 
          112 func (fs *GcsFs) Stat(name string) (os.FileInfo, error) {
          113         return fs.source.Stat(name)
          114 }
          115 
          116 func (fs *GcsFs) Chmod(name string, mode os.FileMode) error {
          117         return fs.source.Chmod(name, mode)
          118 }
          119 
          120 func (fs *GcsFs) Chtimes(name string, atime time.Time, mtime time.Time) error {
          121         return fs.source.Chtimes(name, atime, mtime)
          122 }
          123 
          124 func (fs *GcsFs) Chown(name string, uid, gid int) error {
          125         return fs.source.Chown(name, uid, gid)
          126 }