cloudflare-workers/r2objects.go

43 lines
1.3 KiB
Go
Raw Normal View History

2022-05-29 10:02:40 +09:00
package workers
2022-05-22 22:46:08 +09:00
2022-05-29 09:17:07 +09:00
import (
"fmt"
"syscall/js"
)
2022-05-29 10:13:27 +09:00
// R2Objects represents Cloudflare R2 objects.
2022-05-29 09:17:07 +09:00
// * https://github.com/cloudflare/workers-types/blob/3012f263fb1239825e5f0061b267c8650d01b717/index.d.ts#L1121
2022-05-22 22:46:08 +09:00
type R2Objects struct {
2022-05-29 11:20:09 +09:00
Objects []*R2Object
Truncated bool
// Cursor indicates next cursor of R2Objects.
// * This becomes empty string if cursor doesn't exist.
Cursor string
2022-05-29 09:17:07 +09:00
DelimitedPrefixes []string
}
// toR2Objects converts JavaScript side's R2Objects to *R2Objects.
// * https://github.com/cloudflare/workers-types/blob/3012f263fb1239825e5f0061b267c8650d01b717/index.d.ts#L1121
func toR2Objects(v js.Value) (*R2Objects, error) {
objectsVal := v.Get("objects")
objects := make([]*R2Object, objectsVal.Length())
for i := 0; i < len(objects); i++ {
obj, err := toR2Object(objectsVal.Index(i))
if err != nil {
return nil, fmt.Errorf("error converting to R2Object: %w", err)
}
objects[i] = obj
}
prefixesVal := v.Get("delimitedPrefixes")
2022-05-29 09:17:07 +09:00
prefixes := make([]string, prefixesVal.Length())
for i := 0; i < len(prefixes); i++ {
prefixes[i] = prefixesVal.Index(i).String()
}
return &R2Objects{
Objects: objects,
Truncated: v.Get("truncated").Bool(),
Cursor: maybeString(v.Get("cursor")),
2022-05-29 09:17:07 +09:00
DelimitedPrefixes: prefixes,
}, nil
2022-05-22 22:46:08 +09:00
}