Experimental Livebook-friendly DSL for sketching dataflow pipelines.
This Lab DSL compiles to the stable, pipe-first Choreo.Dataflow builders and
returns an ordinary %Choreo.Dataflow{}. It uses node constructors for dataflow
stages and typed edge vocabulary for normal, error, retry, and dead-letter paths.
Examples
iex> import Choreo.Lab.DSL.Dataflow
...> pipeline = dataflow do
...> ingest = source("Kafka Ingest", rate: "10k/s")
...> parser = transform("JSON Parser", latency_ms: 5)
...> valid = conditional("Valid?")
...> postgres = sink("Postgres")
...> dlq = sink("Dead Letter Queue")
...>
...> ingest ~> parser |> emits("raw events")
...> parser ~> valid |> emits("parsed events")
...> valid ~> postgres |> writes("valid records")
...> dead_letter valid ~> dlq, "invalid records"
...> end
iex> pipeline.graph.nodes[:ingest].node_type
:source
iex> pipeline.edge_meta[{:valid, :dlq}].path_type
:dead_letterEdge labels can use generic labels, typed data labels, or explicit path types:
source ~> transform |> on("events")
edge source ~> transform, data_type: "events"
emits source ~> transform, "events"
error transform ~> sink, "invalid input"
retry transform ~> buffer, "retry later"
dead_letter transform ~> dlq, "poison message"
Summary
Functions
Builds a %Choreo.Dataflow{} from a compact Lab DSL block.
Returns the vocabulary supported by the dataflow DSL.
Compatibility alias for taxonomy/0.
Types
@type edge_decl() :: %{from: Yog.node_id(), to: Yog.node_id(), opts: keyword()}
@type node_decl() :: %{id: Yog.node_id(), builder: atom(), opts: keyword()}
Functions
Builds a %Choreo.Dataflow{} from a compact Lab DSL block.
@spec taxonomy() :: %{ clusters: [atom()], nodes: [atom()], edges: [atom()], modifiers: [atom()], options: [atom()] }
Returns the vocabulary supported by the dataflow DSL.
This is meant as a lightweight Livebook discovery helper when autocomplete is not enough.
iex> taxonomy = Choreo.Lab.DSL.Dataflow.taxonomy()
iex> :source in taxonomy.nodes
true
iex> :emits in taxonomy.edges
true
iex> :dead_letter in taxonomy.edges
true
@spec verbs() :: map()
Compatibility alias for taxonomy/0.