@@ -178,7 +178,7 @@ type KeyResponse struct {
178178 Keys []string
179179 // The continuation token to use to fetch the next page of keys. If this is `null`, then
180180 // there are no more keys to fetch.
181- Cursor * uint64
181+ Cursor * string
182182}
183183
184184func (v * KeyResponse ) String () string { return "KeyResponse" }
@@ -269,7 +269,7 @@ func (v *KeyResponse) WriteToIndex(w wrpc.ByteWriter) (func(wrpc.IndexWriter) er
269269 writes [0 ] = write0
270270 }
271271 slog .Debug ("writing field" , "name" , "cursor" )
272- write1 , err := func (v * uint64 , w interface {
272+ write1 , err := func (v * string , w interface {
273273 io.ByteWriter
274274 io.Writer
275275 }) (func (wrpc.IndexWriter ) error , error ) {
@@ -285,12 +285,26 @@ func (v *KeyResponse) WriteToIndex(w wrpc.ByteWriter) (func(wrpc.IndexWriter) er
285285 return nil , fmt .Errorf ("failed to write `option::some` status byte: %w" , err )
286286 }
287287 slog .Debug ("writing `option::some` payload" )
288- write , err := (func (wrpc.IndexWriter ) error )(nil ), func (v uint64 , w io.Writer ) (err error ) {
289- b := make ([]byte , binary .MaxVarintLen64 )
290- i := binary .PutUvarint (b , uint64 (v ))
291- slog .Debug ("writing u64" )
292- _ , err = w .Write (b [:i ])
293- return err
288+ write , err := (func (wrpc.IndexWriter ) error )(nil ), func (v string , w io.Writer ) (err error ) {
289+ n := len (v )
290+ if n > math .MaxUint32 {
291+ return fmt .Errorf ("string byte length of %d overflows a 32-bit integer" , n )
292+ }
293+ if err = func (v int , w io.Writer ) error {
294+ b := make ([]byte , binary .MaxVarintLen32 )
295+ i := binary .PutUvarint (b , uint64 (v ))
296+ slog .Debug ("writing string byte length" , "len" , n )
297+ _ , err = w .Write (b [:i ])
298+ return err
299+ }(n , w ); err != nil {
300+ return fmt .Errorf ("failed to write string byte length of %d: %w" , n , err )
301+ }
302+ slog .Debug ("writing string bytes" )
303+ _ , err = w .Write ([]byte (v ))
304+ if err != nil {
305+ return fmt .Errorf ("failed to write string bytes: %w" , err )
306+ }
307+ return nil
294308 }(* v , w )
295309 if err != nil {
296310 return nil , fmt .Errorf ("failed to write `option::some` payload: %w" , err )
@@ -388,18 +402,18 @@ func Open(ctx__ context.Context, wrpc__ wrpc.Invoker, identifier string) (r0__ *
388402 }
389403 var w__ wrpc.IndexWriteCloser
390404 var r__ wrpc.IndexReadCloser
391- w__ , r__ , err__ = wrpc__ .Invoke (ctx__ , "wasi:keyvalue/store@0.2.0-draft " , "open" , buf__ .Bytes ())
405+ w__ , r__ , err__ = wrpc__ .Invoke (ctx__ , "wasi:keyvalue/store@0.2.0-draft2 " , "open" , buf__ .Bytes ())
392406 if err__ != nil {
393407 err__ = fmt .Errorf ("failed to invoke `open`: %w" , err__ )
394408 return
395409 }
396410 defer func () {
397411 if err := r__ .Close (); err != nil {
398- slog .ErrorContext (ctx__ , "failed to close reader" , "instance" , "wasi:keyvalue/store@0.2.0-draft " , "name" , "open" , "err" , err )
412+ slog .ErrorContext (ctx__ , "failed to close reader" , "instance" , "wasi:keyvalue/store@0.2.0-draft2 " , "name" , "open" , "err" , err )
399413 }
400414 }()
401415 if cErr__ := w__ .Close (); cErr__ != nil {
402- slog .DebugContext (ctx__ , "failed to close outgoing stream" , "instance" , "wasi:keyvalue/store@0.2.0-draft " , "name" , "open" , "err" , cErr__ )
416+ slog .DebugContext (ctx__ , "failed to close outgoing stream" , "instance" , "wasi:keyvalue/store@0.2.0-draft2 " , "name" , "open" , "err" , cErr__ )
403417 }
404418 r0__ , err__ = func (r wrpc.IndexReadCloser , path ... uint32 ) (* wrpc.Result [wrpc.Own [Bucket ], Error ], error ) {
405419 slog .Debug ("reading result status byte" )
@@ -611,18 +625,18 @@ func Bucket_Get(ctx__ context.Context, wrpc__ wrpc.Invoker, self wrpc.Borrow[Buc
611625 }
612626 var w__ wrpc.IndexWriteCloser
613627 var r__ wrpc.IndexReadCloser
614- w__ , r__ , err__ = wrpc__ .Invoke (ctx__ , "wasi:keyvalue/store@0.2.0-draft " , "bucket.get" , buf__ .Bytes ())
628+ w__ , r__ , err__ = wrpc__ .Invoke (ctx__ , "wasi:keyvalue/store@0.2.0-draft2 " , "bucket.get" , buf__ .Bytes ())
615629 if err__ != nil {
616630 err__ = fmt .Errorf ("failed to invoke `[method]bucket.get`: %w" , err__ )
617631 return
618632 }
619633 defer func () {
620634 if err := r__ .Close (); err != nil {
621- slog .ErrorContext (ctx__ , "failed to close reader" , "instance" , "wasi:keyvalue/store@0.2.0-draft " , "name" , "[method]bucket.get" , "err" , err )
635+ slog .ErrorContext (ctx__ , "failed to close reader" , "instance" , "wasi:keyvalue/store@0.2.0-draft2 " , "name" , "[method]bucket.get" , "err" , err )
622636 }
623637 }()
624638 if cErr__ := w__ .Close (); cErr__ != nil {
625- slog .DebugContext (ctx__ , "failed to close outgoing stream" , "instance" , "wasi:keyvalue/store@0.2.0-draft " , "name" , "[method]bucket.get" , "err" , cErr__ )
639+ slog .DebugContext (ctx__ , "failed to close outgoing stream" , "instance" , "wasi:keyvalue/store@0.2.0-draft2 " , "name" , "[method]bucket.get" , "err" , cErr__ )
626640 }
627641 r0__ , err__ = func (r wrpc.IndexReadCloser , path ... uint32 ) (* wrpc.Result [[]uint8 , Error ], error ) {
628642 slog .Debug ("reading result status byte" )
@@ -919,18 +933,18 @@ func Bucket_Set(ctx__ context.Context, wrpc__ wrpc.Invoker, self wrpc.Borrow[Buc
919933 }
920934 var w__ wrpc.IndexWriteCloser
921935 var r__ wrpc.IndexReadCloser
922- w__ , r__ , err__ = wrpc__ .Invoke (ctx__ , "wasi:keyvalue/store@0.2.0-draft " , "bucket.set" , buf__ .Bytes ())
936+ w__ , r__ , err__ = wrpc__ .Invoke (ctx__ , "wasi:keyvalue/store@0.2.0-draft2 " , "bucket.set" , buf__ .Bytes ())
923937 if err__ != nil {
924938 err__ = fmt .Errorf ("failed to invoke `[method]bucket.set`: %w" , err__ )
925939 return
926940 }
927941 defer func () {
928942 if err := r__ .Close (); err != nil {
929- slog .ErrorContext (ctx__ , "failed to close reader" , "instance" , "wasi:keyvalue/store@0.2.0-draft " , "name" , "[method]bucket.set" , "err" , err )
943+ slog .ErrorContext (ctx__ , "failed to close reader" , "instance" , "wasi:keyvalue/store@0.2.0-draft2 " , "name" , "[method]bucket.set" , "err" , err )
930944 }
931945 }()
932946 if cErr__ := w__ .Close (); cErr__ != nil {
933- slog .DebugContext (ctx__ , "failed to close outgoing stream" , "instance" , "wasi:keyvalue/store@0.2.0-draft " , "name" , "[method]bucket.set" , "err" , cErr__ )
947+ slog .DebugContext (ctx__ , "failed to close outgoing stream" , "instance" , "wasi:keyvalue/store@0.2.0-draft2 " , "name" , "[method]bucket.set" , "err" , cErr__ )
934948 }
935949 r0__ , err__ = func (r wrpc.IndexReadCloser , path ... uint32 ) (* wrpc.Result [struct {}, Error ], error ) {
936950 slog .Debug ("reading result status byte" )
@@ -1104,18 +1118,18 @@ func Bucket_Delete(ctx__ context.Context, wrpc__ wrpc.Invoker, self wrpc.Borrow[
11041118 }
11051119 var w__ wrpc.IndexWriteCloser
11061120 var r__ wrpc.IndexReadCloser
1107- w__ , r__ , err__ = wrpc__ .Invoke (ctx__ , "wasi:keyvalue/store@0.2.0-draft " , "bucket.delete" , buf__ .Bytes ())
1121+ w__ , r__ , err__ = wrpc__ .Invoke (ctx__ , "wasi:keyvalue/store@0.2.0-draft2 " , "bucket.delete" , buf__ .Bytes ())
11081122 if err__ != nil {
11091123 err__ = fmt .Errorf ("failed to invoke `[method]bucket.delete`: %w" , err__ )
11101124 return
11111125 }
11121126 defer func () {
11131127 if err := r__ .Close (); err != nil {
1114- slog .ErrorContext (ctx__ , "failed to close reader" , "instance" , "wasi:keyvalue/store@0.2.0-draft " , "name" , "[method]bucket.delete" , "err" , err )
1128+ slog .ErrorContext (ctx__ , "failed to close reader" , "instance" , "wasi:keyvalue/store@0.2.0-draft2 " , "name" , "[method]bucket.delete" , "err" , err )
11151129 }
11161130 }()
11171131 if cErr__ := w__ .Close (); cErr__ != nil {
1118- slog .DebugContext (ctx__ , "failed to close outgoing stream" , "instance" , "wasi:keyvalue/store@0.2.0-draft " , "name" , "[method]bucket.delete" , "err" , cErr__ )
1132+ slog .DebugContext (ctx__ , "failed to close outgoing stream" , "instance" , "wasi:keyvalue/store@0.2.0-draft2 " , "name" , "[method]bucket.delete" , "err" , cErr__ )
11191133 }
11201134 r0__ , err__ = func (r wrpc.IndexReadCloser , path ... uint32 ) (* wrpc.Result [struct {}, Error ], error ) {
11211135 slog .Debug ("reading result status byte" )
@@ -1290,18 +1304,18 @@ func Bucket_Exists(ctx__ context.Context, wrpc__ wrpc.Invoker, self wrpc.Borrow[
12901304 }
12911305 var w__ wrpc.IndexWriteCloser
12921306 var r__ wrpc.IndexReadCloser
1293- w__ , r__ , err__ = wrpc__ .Invoke (ctx__ , "wasi:keyvalue/store@0.2.0-draft " , "bucket.exists" , buf__ .Bytes ())
1307+ w__ , r__ , err__ = wrpc__ .Invoke (ctx__ , "wasi:keyvalue/store@0.2.0-draft2 " , "bucket.exists" , buf__ .Bytes ())
12941308 if err__ != nil {
12951309 err__ = fmt .Errorf ("failed to invoke `[method]bucket.exists`: %w" , err__ )
12961310 return
12971311 }
12981312 defer func () {
12991313 if err := r__ .Close (); err != nil {
1300- slog .ErrorContext (ctx__ , "failed to close reader" , "instance" , "wasi:keyvalue/store@0.2.0-draft " , "name" , "[method]bucket.exists" , "err" , err )
1314+ slog .ErrorContext (ctx__ , "failed to close reader" , "instance" , "wasi:keyvalue/store@0.2.0-draft2 " , "name" , "[method]bucket.exists" , "err" , err )
13011315 }
13021316 }()
13031317 if cErr__ := w__ .Close (); cErr__ != nil {
1304- slog .DebugContext (ctx__ , "failed to close outgoing stream" , "instance" , "wasi:keyvalue/store@0.2.0-draft " , "name" , "[method]bucket.exists" , "err" , cErr__ )
1318+ slog .DebugContext (ctx__ , "failed to close outgoing stream" , "instance" , "wasi:keyvalue/store@0.2.0-draft2 " , "name" , "[method]bucket.exists" , "err" , cErr__ )
13051319 }
13061320 r0__ , err__ = func (r wrpc.IndexReadCloser , path ... uint32 ) (* wrpc.Result [bool , Error ], error ) {
13071321 slog .Debug ("reading result status byte" )
@@ -1443,7 +1457,7 @@ func Bucket_Exists(ctx__ context.Context, wrpc__ wrpc.Invoker, self wrpc.Borrow[
14431457// MAY show an out-of-date list of keys if there are concurrent writes to the store.
14441458//
14451459// If any error occurs, it returns an `Err(error)`.
1446- func Bucket_ListKeys (ctx__ context.Context , wrpc__ wrpc.Invoker , self wrpc.Borrow [Bucket ], cursor * uint64 ) (r0__ * wrpc.Result [KeyResponse , Error ], err__ error ) {
1460+ func Bucket_ListKeys (ctx__ context.Context , wrpc__ wrpc.Invoker , self wrpc.Borrow [Bucket ], cursor * string ) (r0__ * wrpc.Result [KeyResponse , Error ], err__ error ) {
14471461 var buf__ bytes.Buffer
14481462 write0__ , err__ := (func (wrpc.IndexWriter ) error )(nil ), func (v string , w io.Writer ) (err error ) {
14491463 n := len (v )
@@ -1470,7 +1484,7 @@ func Bucket_ListKeys(ctx__ context.Context, wrpc__ wrpc.Invoker, self wrpc.Borro
14701484 err__ = fmt .Errorf ("failed to write `self` parameter: %w" , err__ )
14711485 return
14721486 }
1473- write1__ , err__ := func (v * uint64 , w interface {
1487+ write1__ , err__ := func (v * string , w interface {
14741488 io.ByteWriter
14751489 io.Writer
14761490 }) (func (wrpc.IndexWriter ) error , error ) {
@@ -1486,12 +1500,26 @@ func Bucket_ListKeys(ctx__ context.Context, wrpc__ wrpc.Invoker, self wrpc.Borro
14861500 return nil , fmt .Errorf ("failed to write `option::some` status byte: %w" , err )
14871501 }
14881502 slog .Debug ("writing `option::some` payload" )
1489- write , err := (func (wrpc.IndexWriter ) error )(nil ), func (v uint64 , w io.Writer ) (err error ) {
1490- b := make ([]byte , binary .MaxVarintLen64 )
1491- i := binary .PutUvarint (b , uint64 (v ))
1492- slog .Debug ("writing u64" )
1493- _ , err = w .Write (b [:i ])
1494- return err
1503+ write , err := (func (wrpc.IndexWriter ) error )(nil ), func (v string , w io.Writer ) (err error ) {
1504+ n := len (v )
1505+ if n > math .MaxUint32 {
1506+ return fmt .Errorf ("string byte length of %d overflows a 32-bit integer" , n )
1507+ }
1508+ if err = func (v int , w io.Writer ) error {
1509+ b := make ([]byte , binary .MaxVarintLen32 )
1510+ i := binary .PutUvarint (b , uint64 (v ))
1511+ slog .Debug ("writing string byte length" , "len" , n )
1512+ _ , err = w .Write (b [:i ])
1513+ return err
1514+ }(n , w ); err != nil {
1515+ return fmt .Errorf ("failed to write string byte length of %d: %w" , n , err )
1516+ }
1517+ slog .Debug ("writing string bytes" )
1518+ _ , err = w .Write ([]byte (v ))
1519+ if err != nil {
1520+ return fmt .Errorf ("failed to write string bytes: %w" , err )
1521+ }
1522+ return nil
14951523 }(* v , w )
14961524 if err != nil {
14971525 return nil , fmt .Errorf ("failed to write `option::some` payload: %w" , err )
@@ -1512,18 +1540,18 @@ func Bucket_ListKeys(ctx__ context.Context, wrpc__ wrpc.Invoker, self wrpc.Borro
15121540 }
15131541 var w__ wrpc.IndexWriteCloser
15141542 var r__ wrpc.IndexReadCloser
1515- w__ , r__ , err__ = wrpc__ .Invoke (ctx__ , "wasi:keyvalue/store@0.2.0-draft " , "bucket.list-keys" , buf__ .Bytes ())
1543+ w__ , r__ , err__ = wrpc__ .Invoke (ctx__ , "wasi:keyvalue/store@0.2.0-draft2 " , "bucket.list-keys" , buf__ .Bytes ())
15161544 if err__ != nil {
15171545 err__ = fmt .Errorf ("failed to invoke `[method]bucket.list-keys`: %w" , err__ )
15181546 return
15191547 }
15201548 defer func () {
15211549 if err := r__ .Close (); err != nil {
1522- slog .ErrorContext (ctx__ , "failed to close reader" , "instance" , "wasi:keyvalue/store@0.2.0-draft " , "name" , "[method]bucket.list-keys" , "err" , err )
1550+ slog .ErrorContext (ctx__ , "failed to close reader" , "instance" , "wasi:keyvalue/store@0.2.0-draft2 " , "name" , "[method]bucket.list-keys" , "err" , err )
15231551 }
15241552 }()
15251553 if cErr__ := w__ .Close (); cErr__ != nil {
1526- slog .DebugContext (ctx__ , "failed to close outgoing stream" , "instance" , "wasi:keyvalue/store@0.2.0-draft " , "name" , "[method]bucket.list-keys" , "err" , cErr__ )
1554+ slog .DebugContext (ctx__ , "failed to close outgoing stream" , "instance" , "wasi:keyvalue/store@0.2.0-draft2 " , "name" , "[method]bucket.list-keys" , "err" , cErr__ )
15271555 }
15281556 r0__ , err__ = func (r wrpc.IndexReadCloser , path ... uint32 ) (* wrpc.Result [KeyResponse , Error ], error ) {
15291557 slog .Debug ("reading result status byte" )
@@ -1609,7 +1637,7 @@ func Bucket_ListKeys(ctx__ context.Context, wrpc__ wrpc.Invoker, self wrpc.Borro
16091637 return nil , fmt .Errorf ("failed to read `keys` field: %w" , err )
16101638 }
16111639 slog .Debug ("reading field" , "name" , "cursor" )
1612- v .Cursor , err = func (r wrpc.IndexReadCloser , path ... uint32 ) (* uint64 , error ) {
1640+ v .Cursor , err = func (r wrpc.IndexReadCloser , path ... uint32 ) (* string , error ) {
16131641 slog .Debug ("reading option status byte" )
16141642 status , err := r .ReadByte ()
16151643 if err != nil {
@@ -1620,28 +1648,41 @@ func Bucket_ListKeys(ctx__ context.Context, wrpc__ wrpc.Invoker, self wrpc.Borro
16201648 return nil , nil
16211649 case 1 :
16221650 slog .Debug ("reading `option::some` payload" )
1623- v , err := func (r io.ByteReader ) (uint64 , error ) {
1624- var x uint64
1651+ v , err := func (r interface {
1652+ io.ByteReader
1653+ io.Reader
1654+ }) (string , error ) {
1655+ var x uint32
16251656 var s uint8
1626- for i := 0 ; i < 10 ; i ++ {
1627- slog .Debug ("reading u64 byte" , "i" , i )
1657+ for i := 0 ; i < 5 ; i ++ {
1658+ slog .Debug ("reading string length byte" , "i" , i )
16281659 b , err := r .ReadByte ()
16291660 if err != nil {
16301661 if i > 0 && err == io .EOF {
16311662 err = io .ErrUnexpectedEOF
16321663 }
1633- return x , fmt .Errorf ("failed to read u64 byte: %w" , err )
1664+ return "" , fmt .Errorf ("failed to read string length byte: %w" , err )
16341665 }
1635- if s == 63 && b > 0x01 {
1636- return x , errors .New ("varint overflows a 64 -bit integer" )
1666+ if s == 28 && b > 0x0f {
1667+ return "" , errors .New ("string length overflows a 32 -bit integer" )
16371668 }
16381669 if b < 0x80 {
1639- return x | uint64 (b )<< s , nil
1670+ x = x | uint32 (b )<< s
1671+ buf := make ([]byte , x )
1672+ slog .Debug ("reading string bytes" , "len" , x )
1673+ _ , err = r .Read (buf )
1674+ if err != nil {
1675+ return "" , fmt .Errorf ("failed to read string bytes: %w" , err )
1676+ }
1677+ if ! utf8 .Valid (buf ) {
1678+ return string (buf ), errors .New ("string is not valid UTF-8" )
1679+ }
1680+ return string (buf ), nil
16401681 }
1641- x |= uint64 (b & 0x7f ) << s
1682+ x |= uint32 (b & 0x7f ) << s
16421683 s += 7
16431684 }
1644- return x , errors .New ("varint overflows a 64 -bit integer" )
1685+ return "" , errors .New ("string length overflows a 32 -bit integer" )
16451686 }(r )
16461687 if err != nil {
16471688 return nil , fmt .Errorf ("failed to read `option::some` value: %w" , err )
0 commit comments