cx_leaderboard v0.1.0 CxLeaderboard.Storage behaviour View Source

Use this behaviour to implement your own leaderboard storage engines.

Link to this section Summary

Callbacks

Add a single entry to the leaderboard. Return an error if the entry is already in the leaderboard. The operation should be blocking

Atomically insert an entry, or update it if its id already exists in the leaderboard

Replace all data in the leaderboard with the data in the provided stream. Return immediately, perform most of the work asynchronously

Return a correctly ordered stream of bottom leaderboard records that can be accessed all the way to the top

Clear all the data in your leaderboard state

Show the number of records in the leaderboard

Create a leaderboard in your storage (keyword arguments are determined by storage needs). Return what needs to be persisted

Return a leaderboard record by its id. Return nil if not found

Return a list of records around the given id. The list should go from top to bottom if the range is increasing, and from bottom to top if range decreasing. Zero always corresponds to where the id is positioned

If supporting server/client mode: add a way to fetch the leaderboard stored in your GenServer’s state

Replace all data in the leaderboard with the data in the provided stream. Block until completed

Remove a single entry from the leaderboard based on its id. Return an error if the id does not exist. The operation should be blocking

If supporting server/client mode: add a way to start the server and make sure to store the leaderboard struct in the state, since it will be needed for get_lb

Return a correctly ordered stream of top leaderboard records that can be accessed all the way to the bottom

Update a single entry in the leaderboard. Return an error if the entry is not found in the leaderboard. The operation should be blocking

Link to this section Callbacks

Add a single entry to the leaderboard. Return an error if the entry is already in the leaderboard. The operation should be blocking.

Atomically insert an entry, or update it if its id already exists in the leaderboard.

Link to this callback async_populate(arg0, arg1, arg2) View Source (optional)
async_populate(
  CxLeaderboard.Leaderboard.state(),
  Enumerable.t(),
  CxLeaderboard.Indexer.t()
) :: {:ok, term()} | {:error, term()}

Replace all data in the leaderboard with the data in the provided stream. Return immediately, perform most of the work asynchronously.

Return a correctly ordered stream of bottom leaderboard records that can be accessed all the way to the top.

Clear all the data in your leaderboard state.

Show the number of records in the leaderboard.

Link to this callback create(keyword) View Source
create(keyword()) :: {:ok, CxLeaderboard.Leaderboard.state()} | {:error, term()}

Create a leaderboard in your storage (keyword arguments are determined by storage needs). Return what needs to be persisted.

Return a leaderboard record by its id. Return nil if not found.

Return a list of records around the given id. The list should go from top to bottom if the range is increasing, and from bottom to top if range decreasing. Zero always corresponds to where the id is positioned.

For example:

  • A range -2..1 should return (from top to bottom) 2 records prior to the given id, the record at the given id, and 1 record after the given id.
  • A range 2..-2 should return (from bottom to top) 2 records after the given id, the record at the given id, and 2 records before the given id.

If supporting server/client mode: add a way to fetch the leaderboard stored in your GenServer’s state.

Replace all data in the leaderboard with the data in the provided stream. Block until completed.

Remove a single entry from the leaderboard based on its id. Return an error if the id does not exist. The operation should be blocking.

If supporting server/client mode: add a way to start the server and make sure to store the leaderboard struct in the state, since it will be needed for get_lb.

Return a correctly ordered stream of top leaderboard records that can be accessed all the way to the bottom.

Update a single entry in the leaderboard. Return an error if the entry is not found in the leaderboard. The operation should be blocking.