RustQ.Splice (rustq v0.5.1)

Copy Markdown View Source

Helpers for composing RustQ splice replacements as plain keyword lists.

Splices use the same shape accepted by RustQ.render/3:

[items: [RustQ.Rust.item("pub fn generated() {}")]]

merge/1 also accepts nested splice sources, so manifests can compose output from several generators without wrapper structs.

Summary

Functions

Appends replacement fragments to a splice name.

Merges splice sources, concatenating duplicate names.

Replaces all fragments for a splice name.

Types

name()

@type name() :: atom()

replacement()

@type replacement() :: term() | [term()]

source()

@type source() :: t() | map() | [source() | {name(), replacement()}]

t()

@type t() :: keyword([term()])

Functions

append(splices, name, replacement)

@spec append(t(), name(), replacement()) :: t()

Appends replacement fragments to a splice name.

merge(splices)

@spec merge(source()) :: t()

Merges splice sources, concatenating duplicate names.

Accepts ordinary keywords, maps, or nested lists of splice sources:

RustQ.Splice.merge([
  BaseGenerator.splices(schema),
  NativeGenerator.splices(schema),
  items: RustQ.Rust.item("pub fn generated() {}")
])

put(splices, name, replacement)

@spec put(t(), name(), replacement()) :: t()

Replaces all fragments for a splice name.