diff --git a/storage_versioned_docs/version-badger_v2.x.x/README.md b/storage_versioned_docs/version-badger_v2.x.x/README.md index 573df7fcb45..532bebabf3e 100644 --- a/storage_versioned_docs/version-badger_v2.x.x/README.md +++ b/storage_versioned_docs/version-badger_v2.x.x/README.md @@ -54,6 +54,7 @@ type Storage interface { - [AzureBlob](./azureblob/README.md) - [Badger](./badger/README.md) - [Bbolt](./bbolt) +- [CloudflareKV](./cloudflarekv/README.md) - [Coherence](./coherence/README.md) - [Couchbase](./couchbase/README.md) - [DynamoDB](./dynamodb/README.md) @@ -61,6 +62,7 @@ type Storage interface { - [Memcache](./memcache/README.md) - [Memory](./memory/README.md) - [Minio](./minio/README.md) +- [MockStorage](./mockstorage/README.md) - [MongoDB](./mongodb/README.md) - [MSSQL](./mssql/README.md) - [MySQL](./mysql/README.md) diff --git a/storage_versioned_docs/version-badger_v2.x.x/cloudflarekv/README.md b/storage_versioned_docs/version-badger_v2.x.x/cloudflarekv/README.md new file mode 100644 index 00000000000..619103e762e --- /dev/null +++ b/storage_versioned_docs/version-badger_v2.x.x/cloudflarekv/README.md @@ -0,0 +1,114 @@ +--- +id: cloudflarekv +title: Cloudflare KV +--- + +![Release](https://img.shields.io/github/v/tag/gofiber/storage?filter=cloudflarekv*) +[![Discord](https://img.shields.io/discord/704680098577514527?style=flat&label=%F0%9F%92%AC%20discord&color=00ACD7)](https://gofiber.io/discord) +![Test](https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-cloudflarekv.yml?label=Tests) +![Security](https://img.shields.io/github/actions/workflow/status/gofiber/storage/gosec.yml?label=Security) +![Linter](https://img.shields.io/github/actions/workflow/status/gofiber/storage/linter.yml?label=Linter) + +A Cloudflare KV storage driver using [cloudflare/cloudflare-go](https://github.com/cloudflare/cloudflare-go). + +**Note: Requires Go 1.21 and above** + +### Table of Contents + +- [Signatures](#signatures) +- [Installation](#installation) +- [Examples](#examples) +- [Config](#config) +- [Default Config](#default-config) + +### Signatures + +```go +func New(config ...Config) Storage +func (s *Storage) Get(key string) ([]byte, error) +func (s *Storage) Set(key string, val []byte, exp time.Duration) error +func (s *Storage) Delete(key string) error +func (s *Storage) Reset() error +func (s *Storage) Close() error +func (s *Storage) Conn() *cloudflare.API +``` + +### Installation + +```bash +go mod init github.com// +``` + +And then install the Cloudflare KV implementation: + +```bash +go get github.com/gofiber/storage/cloudflarekv +``` + +### Examples + +Import the storage package. + +```go +import "github.com/gofiber/storage/cloudflarekv" +``` + +You can use the following methods to create storage. The Key must be an API Token generated with at least `Account.Workers KV Storage` permission. Check the [Create API Token](https://developers.cloudflare.com/fundamentals/api/get-started/create-token/) documentation to generate one. + +```go +// Initialize default config +store := cloudflarekv.New() + +store := cloudflarekv.New(cloudflarekv.Config{ + Key: "", + Email: "", + AccountID: "fiber", + NamespaceID: "fiber", + Reset: false, +}) + +``` + +### Config + +```go +type Config struct { + + // Cloudflare Auth Token + // + // Optional. Default is "" + Key string + + // Cloudflare Email + // + // Optional. Default is "" + Email string + + // Account id + // + // Optional. Default is "fiber" + AccountID string + + // Namespace id + // + // Optional. Default is "fiber" + NamespaceID string + + // Reset clears any existing keys in existing Table + // + // Optional. Default is false + Reset bool +} +``` + +### Default Config + +```go +var ConfigDefault = Config{ + Key: "", + Email: "", + AccountID: "fiber", + NamespaceID: "fiber", + Reset: false, +} +``` diff --git a/storage_versioned_docs/version-badger_v2.x.x/mockstorage/README.md b/storage_versioned_docs/version-badger_v2.x.x/mockstorage/README.md new file mode 100644 index 00000000000..89c0513c030 --- /dev/null +++ b/storage_versioned_docs/version-badger_v2.x.x/mockstorage/README.md @@ -0,0 +1,171 @@ +--- +id: mockstorage +title: MockStorage +--- + + +![Release](https://img.shields.io/github/v/tag/gofiber/storage?filter=mockstorage*) +[![Discord](https://img.shields.io/discord/704680098577514527?style=flat&label=%F0%9F%92%AC%20discord&color=00ACD7)](https://gofiber.io/discord) +![Test](https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-mockstorage.yml?label=Tests) +![Security](https://img.shields.io/github/actions/workflow/status/gofiber/storage/gosec.yml?label=Security) +![Linter](https://img.shields.io/github/actions/workflow/status/gofiber/storage/linter.yml?label=Linter) + +A mock storage implementation for Fiber. This storage is not persistent and is only used for testing purposes. + +**Note: Requires Go 1.21 and above** + +## Table of Contents +- [Signatures](#signatures) +- [Installation](#installation) +- [Examples](#examples) +- [Config](#config) +- [Default Config](#default-config) + + +## Signatures + +### Structs + +```go +type Storage struct { + // contains filtered or unexported fields +} + +type Entry struct { + Value []byte + Exp time.Time +} + +type Config struct { + CustomFuncs *CustomFuncs +} + +type CustomFuncs struct { + GetFunc func(key string) ([]byte, error) + SetFunc func(key string, val []byte, exp time.Duration) error + DeleteFunc func(key string) error + ResetFunc func() error + CloseFunc func() error + ConnFunc func() map[string]Entry + KeysFunc func() ([][]byte, error) +} +``` + +### Functions +```go +// New creates a new Storage instance. You can optionally pass a Config. +func New(config ...Config) *Storage + +// Get retrieves the value associated with the given key. +func (s *Storage) Get(key string) ([]byte, error) + +// Set sets the value for the given key, with an optional expiration duration. +func (s *Storage) Set(key string, val []byte, exp time.Duration) error + +// Delete removes the value associated with the given key. +func (s *Storage) Delete(key string) error + +// Reset clears all values from the storage. +func (s *Storage) Reset() error + +// Close performs any necessary cleanup when the storage is no longer needed. +func (s *Storage) Close() error + +// Conn returns a copy of the current state of the storage. +func (s *Storage) Conn() map[string]Entry + +// Keys returns a list of all keys in the storage. +func (s *Storage) Keys() ([][]byte, error) + +// SetCustomFuncs allows you to set custom functions for the storage operations. +func (s *Storage) SetCustomFuncs(custom *CustomFuncs) +``` + +## Installation +MockStorage is tested on the 2 last [Go versions](https://golang.org/dl/) with support for modules. So make sure to initialize one first if you didn't do that yet: +```bash +go mod init github.com// +``` +And then install the mockstorage implementation: +```bash +go get github.com/gofiber/storage/mockstorage +``` + +## Examples +Import the storage package. +```go +import "github.com/gofiber/storage/mockstorage" +``` + +You can use the following possibilities to create a storage: +```go +// Initialize default config +store := mockstorage.New() + +// Set a value in the storage. +err := store.Set("key1", []byte("value1"), 0) +if err != nil { + // handle error +} + +// Get a value from the storage. +val, err := store.Get("key1") +if err != nil { + // handle error +} +fmt.Println(string(val)) // prints "value1" + +// Delete a value from the storage. +err = store.Delete("key1") +if err != nil { + // handle error +} + +// Mocking storage operations in tests: +func TestMyFunction(t *testing.T) { + // Create a new instance of MockStorage + store := mockstorage.New() + + // Mock the Set function + store.SetCustomFuncs(&mockstorage.CustomFuncs{ + Set: func(key string, val []byte, exp time.Duration) error { + if key == "expectedKey" && string(val) == "expectedValue" { + return nil + } + return errors.New("unexpected key or value") + }, + }) + + // Call the function you want to test, which should call store.Set + err := MyFunction(store) + + // Check that the function behaved as expected + if err != nil { + t.Errorf("MyFunction returned an error: %v", err) + } +} +``` + +> **Note:** In the `mockstorage` package, expiration of data is not handled automatically in the background. The data is only marked as expired and removed when you attempt to `Get()` it after its expiration time. If you're using a custom `Get()` function or accessing the data directly using the `Conn()` function, expired data will not be removed. Keep this in mind when writing your tests. + +## Config +```go +type Config struct { + CustomFuncs *CustomFuncs +} +``` + +## Default Config +```go +var ConfigDefault = Config{ + CustomFuncs: &CustomFuncs{ + GetFunc: nil, + SetFunc: nil, + DeleteFunc: nil, + ResetFunc: nil, + CloseFunc: nil, + ConnFunc: nil, + KeysFunc: nil, + }, +} +``` diff --git a/storage_versioned_docs/version-badger_v2.x.x/s3/README.md b/storage_versioned_docs/version-badger_v2.x.x/s3/README.md index 7fa708f0e0a..15890a195e4 100644 --- a/storage_versioned_docs/version-badger_v2.x.x/s3/README.md +++ b/storage_versioned_docs/version-badger_v2.x.x/s3/README.md @@ -35,6 +35,7 @@ func (s *Storage) Conn() *s3.Client // Additional useful methods. func (s *Storage) CreateBucket(bucket string) error func (s *Storage) DeleteBucket(bucket string) error +func (s *Storage) DeleteMany(keys ...string) error func (s *Storage) SetWithChecksum(key string, val []byte, checksum map[types.ChecksumAlgorithm][]byte) error ```