mirror of
https://github.com/syumai/workers.git
synced 2025-03-10 17:29:11 +00:00
remove R2Bucket interface type
This commit is contained in:
parent
e3163f30c6
commit
474db95802
26
r2bucket.go
26
r2bucket.go
@ -9,37 +9,27 @@ import (
|
||||
// R2Bucket represents interface of Cloudflare Worker's R2 Bucket instance.
|
||||
// - https://developers.cloudflare.com/r2/runtime-apis/#bucket-method-definitions
|
||||
// - https://github.com/cloudflare/workers-types/blob/3012f263fb1239825e5f0061b267c8650d01b717/index.d.ts#L1006
|
||||
type R2Bucket interface {
|
||||
Head(key string) (*R2Object, error)
|
||||
Get(key string) (*R2Object, error)
|
||||
Put(key string, value io.ReadCloser, opts *R2PutOptions) (*R2Object, error)
|
||||
Delete(key string) error
|
||||
List() (*R2Objects, error)
|
||||
}
|
||||
|
||||
type r2Bucket struct {
|
||||
type R2Bucket struct {
|
||||
instance js.Value
|
||||
}
|
||||
|
||||
var _ R2Bucket = &r2Bucket{}
|
||||
|
||||
// NewR2Bucket returns R2Bucket for given variable name.
|
||||
// - variable name must be defined in wrangler.toml.
|
||||
// - see example: https://github.com/syumai/workers/tree/main/examples/r2-image-viewer
|
||||
// - if the given variable name doesn't exist on global object, returns error.
|
||||
func NewR2Bucket(varName string) (R2Bucket, error) {
|
||||
func NewR2Bucket(varName string) (*R2Bucket, error) {
|
||||
inst := js.Global().Get(varName)
|
||||
if inst.IsUndefined() {
|
||||
return nil, fmt.Errorf("%s is undefined", varName)
|
||||
}
|
||||
return &r2Bucket{instance: inst}, nil
|
||||
return &R2Bucket{instance: inst}, nil
|
||||
}
|
||||
|
||||
// Head returns the result of `head` call to R2Bucket.
|
||||
// - Body field of *R2Object is always nil for Head call.
|
||||
// - if the object for given key doesn't exist, returns nil.
|
||||
// - if a network error happens, returns error.
|
||||
func (r *r2Bucket) Head(key string) (*R2Object, error) {
|
||||
func (r *R2Bucket) Head(key string) (*R2Object, error) {
|
||||
p := r.instance.Call("head", key)
|
||||
v, err := awaitPromise(p)
|
||||
if err != nil {
|
||||
@ -54,7 +44,7 @@ func (r *r2Bucket) Head(key string) (*R2Object, error) {
|
||||
// Get returns the result of `get` call to R2Bucket.
|
||||
// - if the object for given key doesn't exist, returns nil.
|
||||
// - if a network error happens, returns error.
|
||||
func (r *r2Bucket) Get(key string) (*R2Object, error) {
|
||||
func (r *R2Bucket) Get(key string) (*R2Object, error) {
|
||||
p := r.instance.Call("get", key)
|
||||
v, err := awaitPromise(p)
|
||||
if err != nil {
|
||||
@ -102,7 +92,7 @@ func (opts *R2PutOptions) toJS() js.Value {
|
||||
// * This method copies all bytes into memory for implementation restriction.
|
||||
// * Body field of *R2Object is always nil for Put call.
|
||||
// * if a network error happens, returns error.
|
||||
func (r *r2Bucket) Put(key string, value io.ReadCloser, opts *R2PutOptions) (*R2Object, error) {
|
||||
func (r *R2Bucket) Put(key string, value io.ReadCloser, opts *R2PutOptions) (*R2Object, error) {
|
||||
// fetch body cannot be ReadableStream. see: https://github.com/whatwg/fetch/issues/1438
|
||||
b, err := io.ReadAll(value)
|
||||
if err != nil {
|
||||
@ -121,7 +111,7 @@ func (r *r2Bucket) Put(key string, value io.ReadCloser, opts *R2PutOptions) (*R2
|
||||
|
||||
// Delete returns the result of `delete` call to R2Bucket.
|
||||
// * if a network error happens, returns error.
|
||||
func (r *r2Bucket) Delete(key string) error {
|
||||
func (r *R2Bucket) Delete(key string) error {
|
||||
p := r.instance.Call("delete", key)
|
||||
if _, err := awaitPromise(p); err != nil {
|
||||
return err
|
||||
@ -131,7 +121,7 @@ func (r *r2Bucket) Delete(key string) error {
|
||||
|
||||
// List returns the result of `list` call to R2Bucket.
|
||||
// * if a network error happens, returns error.
|
||||
func (r *r2Bucket) List() (*R2Objects, error) {
|
||||
func (r *R2Bucket) List() (*R2Objects, error) {
|
||||
p := r.instance.Call("list")
|
||||
v, err := awaitPromise(p)
|
||||
if err != nil {
|
||||
|
Loading…
x
Reference in New Issue
Block a user