77 lines
1.5 KiB
Go
77 lines
1.5 KiB
Go
package mongo
|
|
|
|
import (
|
|
"encoding/base64"
|
|
"fmt"
|
|
|
|
"go.mongodb.org/mongo-driver/v2/bson"
|
|
)
|
|
|
|
func EncodeCursor(v any) string {
|
|
var id string
|
|
switch v.(type) {
|
|
case bson.ObjectID:
|
|
id = v.(bson.ObjectID).Hex()
|
|
default:
|
|
id = v.(string)
|
|
}
|
|
|
|
val := fmt.Sprintf("%s", id)
|
|
|
|
return base64.RawURLEncoding.EncodeToString([]byte(val))
|
|
}
|
|
|
|
func DecodeCursor(okey string) (bson.ObjectID, error) {
|
|
data, err := base64.StdEncoding.DecodeString(okey)
|
|
|
|
if err != nil {
|
|
return bson.NilObjectID, err
|
|
}
|
|
|
|
oid, _ := bson.ObjectIDFromHex(string(data))
|
|
|
|
return oid, nil
|
|
}
|
|
|
|
|
|
// func EncodeCursor(name string, v1 any, v2 any) string {
|
|
// var otherValue string
|
|
// var otherType string
|
|
|
|
// switch v1.(type) {
|
|
// case time.Time:
|
|
// otherType = "time.Time"
|
|
// otherValue = v1.(time.Time).Truncate(time.Millisecond).Format()
|
|
// case int:
|
|
// otherType = "time.Time"
|
|
// otherValue = v1.(time.Time).Truncate(time.Millisecond).Format()
|
|
// }
|
|
|
|
// var id string
|
|
// switch v2.(type) {
|
|
// case bson.ObjectID:
|
|
// id = v2.(bson.ObjectID).Hex()
|
|
// case string:
|
|
// id = v2.(string)
|
|
// default:
|
|
// id = v2.(string)
|
|
// }
|
|
|
|
// v := fmt.Sprintf("%v|%s", misc, id)
|
|
|
|
// fmt.Println(v, name)
|
|
|
|
// return base64.RawURLEncoding.EncodeToString([]byte(v))
|
|
// }
|
|
|
|
// func DecodeCursor(okey string) (name string, v1 any, v2 any) {
|
|
// data, err := base64.StdEncoding.DecodeString(okey)
|
|
// if err != nil {
|
|
// return "", nil, nil
|
|
// }
|
|
|
|
// parts := strings.Split(string(data), "|")
|
|
// if len(parts) != 3 {
|
|
// return "", nil, nil
|
|
// }
|
|
// } |