datastar/ds_sse

This module provides functions to work with Datastar server sent events.

See reference here https://data-star.dev/reference/sse_events.

Types

SSE Events that can be send to the client. Like datastar-patch-elements.

pub opaque type Event

The merge mode used by patch elements

pub type MergeMode {
  After
  Append
  Before
  Inner
  Outer
  Prepend
  Replace
  Remove
}

Constructors

  • After
  • Append
  • Before
  • Inner
  • Outer
  • Prepend
  • Replace
  • Remove
pub opaque type PatchElementConfig
pub opaque type PatchSignalsConfig

Functions

pub fn event_to_string(event: Event) -> String

Takes an Event and generates a string to send back to the client

patch_elements("#target")
|> patch_elements_end
|> event_to_string

Generates:

event: datastar-patch-elements
data: selector #target

pub fn events_to_string(events events: List(Event)) -> String

Takes a list of Event and generates the string to send to the client

[
  patch_elements("<span>Hello</span>")
  |> patch_elements_end,
  patch_elements("#target")
  |> patch_elements_mode(Remove)
  |> patch_elements_end,
]
|> events_to_string

Generates:

event: datastar-patch-elements
data: elements <span>Hello</span>

event: datastar-patch-elements
data: mode remove
data: selector #target

pub fn patch_elements() -> PatchElementConfig

Event to send new elements to the client

patch_elements()
|> patch_elements_element("<span>1</span>")
|> patch_elements_selector("#feed")
|> patch_elements_end

Generates:

event: datastar-patch-elements
data: selector #feed
data: elements <span>1</span>

pub fn patch_elements_elements(
  config: PatchElementConfig,
  value: String,
) -> PatchElementConfig
|> patch_elements_elements("<div>Hello</div>"),

Generates:

id: 123
pub fn patch_elements_end(config: PatchElementConfig) -> Event
pub fn patch_elements_event_id(
  config: PatchElementConfig,
  value: String,
) -> PatchElementConfig
|> patch_elements_event_id("123"),

Generates:

id: 123
pub fn patch_elements_merge_mode(
  config: PatchElementConfig,
  value: MergeMode,
) -> PatchElementConfig
|> patch_elements_merge_mode(MergeMode.Inner),

Generates:

data: mode inner
pub fn patch_elements_retry(
  config: PatchElementConfig,
  value: Int,
) -> PatchElementConfig
|> patch_elements_retry(3000),

Generates:

retry: 3000
pub fn patch_elements_selector(
  config: PatchElementConfig,
  value: String,
) -> PatchElementConfig
|> patch_elements_selector("#feed"),

Generates:

data: selector #feed
pub fn patch_elements_settle_duration(
  config: PatchElementConfig,
  value: Int,
) -> PatchElementConfig
pub fn patch_elements_view_transition(
  config: PatchElementConfig,
  value: Bool,
) -> PatchElementConfig
pub fn patch_signals(signals: Json) -> PatchSignalsConfig

Generate a datastar-patch-signals event

let json = json.object([
  #("name", json.string("sam"))
])

patch_signals(json)
|> patch_signals_end

Generates:

event: datastar-patch-signals
data: signals {\"name\":\"Sam\"}

pub fn patch_signals_end(config: PatchSignalsConfig) -> Event
pub fn patch_signals_event_id(
  config: PatchSignalsConfig,
  value: String,
) -> PatchSignalsConfig
...
|> patch_signals_event_id("123")

Generates:

id: 123
pub fn patch_signals_only_if_missing(
  config: PatchSignalsConfig,
  value: Bool,
) -> PatchSignalsConfig
|> patch_signals_only_if_missing(True),

Generates:

data: onlyIfMissing true
pub fn patch_signals_retry(
  config: PatchSignalsConfig,
  value: Int,
) -> PatchSignalsConfig
|> patch_signals_retry(3000),

Generates:

retry: 3000
Search Document