## Description
Introduce an abstraction for handling cursors with multiple formats. The
abstraction handles:
- Trying formats in order of precedence during parsing.
- Serializing always to the "primary" format.
- Not offering a derived equality operator -- users need to define an
equality operator for their cursor type that handles normalization
between cursor types.
## Test plan
Updated the E2E test:
```
$ cargo nextest run -p sui-indexer-alt-e2e-tests --test graphql_transactions_query_tests
```
---
## Release notes
Check each box that your changes affect. If none of the boxes relate to
your changes, release notes aren't required.
For each box you select, include information after the relevant heading
that describes the impact of your changes that a user might notice and
any actions they must take to implement updates.
- [ ] Protocol:
- [ ] Nodes (Validators and Full nodes):
- [ ] gRPC:
- [ ] JSON-RPC:
- [ ] GraphQL:
- [ ] CLI:
- [ ] Rust SDK:
- [ ] Indexing Framework:
## Description
Describe the changes or additions included in this PR.
## Test plan
How did you test the new or updated feature?
---
## Release notes
Check each box that your changes affect. If none of the boxes relate to
your changes, release notes aren't required.
For each box you select, include information after the relevant heading
that describes the impact of your changes that a user might notice and
any actions they must take to implement updates.
- [ ] Protocol:
- [ ] Nodes (Validators and Full nodes):
- [ ] gRPC:
- [ ] JSON-RPC:
- [ ] GraphQL:
- [ ] CLI:
- [ ] Rust SDK:
- [ ] Indexing Framework:
Co-authored-by: Ashok Menon <ashok@mystenlabs.com>