...

Source file src/go.einride.tech/aip/pagination/struct.go

Documentation: go.einride.tech/aip/pagination

     1  package pagination
     2  
     3  import (
     4  	"encoding/base64"
     5  	"encoding/gob"
     6  	"errors"
     7  	"fmt"
     8  	"io"
     9  	"strings"
    10  )
    11  
    12  // EncodePageTokenStruct encodes an arbitrary struct as a page token.
    13  func EncodePageTokenStruct(v interface{}) string {
    14  	var b strings.Builder
    15  	base64Encoder := base64.NewEncoder(base64.URLEncoding, &b)
    16  	gobEncoder := gob.NewEncoder(base64Encoder)
    17  	_ = gobEncoder.Encode(v)
    18  	_ = base64Encoder.Close()
    19  	return b.String()
    20  }
    21  
    22  // DecodePageTokenStruct decodes an encoded page token into an arbitrary struct.
    23  func DecodePageTokenStruct(s string, v interface{}) error {
    24  	dec := gob.NewDecoder(base64.NewDecoder(base64.URLEncoding, strings.NewReader(s)))
    25  	if err := dec.Decode(v); err != nil && !errors.Is(err, io.EOF) {
    26  		return fmt.Errorf("decode page token struct: %w", err)
    27  	}
    28  	return nil
    29  }
    30  

View as plain text