21 lines
739 B
Python
21 lines
739 B
Python
import base64, json
|
|
from typing import Any
|
|
|
|
def encode_cursor(values: list[Any] | None, desc_flags: list[bool], backward: bool) -> str | None:
|
|
if not values:
|
|
return None
|
|
payload = {"v": values, "d": desc_flags, "b": backward}
|
|
return base64.urlsafe_b64encode(json.dumps(payload).encode()).decode()
|
|
|
|
def decode_cursor(token: str | None) -> tuple[list[Any] | None, bool] | tuple[None, bool]:
|
|
if not token:
|
|
return None, False
|
|
try:
|
|
obj = json.loads(base64.urlsafe_b64decode(token.encode()).decode())
|
|
vals = obj.get("v")
|
|
backward = bool(obj.get("b", False))
|
|
if isinstance(vals, list):
|
|
return vals, backward
|
|
except Exception:
|
|
pass
|
|
return None, False
|