lightspeed/presence

Deterministic presence tracker and diff model.

Types

Presence diff payload with joins and leaves.

pub type Diff {
  Diff(topic: String, joins: List(Entry), leaves: List(Entry))
}

Constructors

  • Diff(topic: String, joins: List(Entry), leaves: List(Entry))

Presence entry keyed by user identifier.

pub type Entry {
  Entry(key: String, metas: List(Meta))
}

Constructors

  • Entry(key: String, metas: List(Meta))

Presence metadata for one connection.

pub type Meta {
  Meta(ref: String, online_at_ms: Int)
}

Constructors

  • Meta(ref: String, online_at_ms: Int)

Tracker

opaque

Presence tracker state.

pub opaque type Tracker

Values

pub fn diff_label(diff: Diff) -> String

Stable diff label for fixtures.

pub fn diff_topic(diff: Diff) -> String

Diff topic.

pub fn get(
  tracker: Tracker,
  topic: String,
  key: String,
) -> option.Option(Entry)

Get one key presence entry.

pub fn join(
  tracker: Tracker,
  topic: String,
  key: String,
  meta: Meta,
) -> #(Tracker, Diff)

Track one join presence and return resulting diff.

pub fn join_count(diff: Diff) -> Int

Number of join entries in one diff.

pub fn joins(diff: Diff) -> List(Entry)

Joined entries.

pub fn key_count(tracker: Tracker, topic: String) -> Int

Number of tracked keys in one topic.

pub fn leave(
  tracker: Tracker,
  topic: String,
  key: String,
  ref: String,
) -> #(Tracker, Diff)

Track one leave presence and return resulting diff.

pub fn leave_count(diff: Diff) -> Int

Number of leave entries in one diff.

pub fn leaves(diff: Diff) -> List(Entry)

Left entries.

pub fn list_topic(tracker: Tracker, topic: String) -> List(Entry)

List full presence state for one topic.

pub fn meta_online_at_ms(meta: Meta) -> Int

Meta online timestamp.

pub fn meta_ref(meta: Meta) -> String

Meta reference.

pub fn new() -> Tracker

New tracker.

pub fn ref_count(tracker: Tracker, topic: String) -> Int

Number of tracked refs in one topic.

pub fn topic_labels(tracker: Tracker) -> List(String)

Stable topic labels for logs and tests.

Search Document