1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
[]
= "dataflow-rs"
= "3.2.0"
= "2024"
= "1.85"
# Allowlist of what ships in the published .crate: the library, its examples
# and tests, and the user-facing root docs. An allowlist fails safe — future
# repo-root additions (CI config, tooling, the npm-published ui/, the GitHub
# Pages docs/) stay out without anyone remembering to add an exclude entry.
= [
"/src",
"/examples",
"/tests",
"/README.md",
"/CHANGELOG.md",
"/CONTRIBUTING.md",
"/SECURITY.md",
"/LICENSE",
]
= ["Plasmatic Engineering <shankar@goplasmatic.io>"]
= "Apache-2.0"
= "A lightweight rules engine for building IFTTT-style automation and data processing pipelines in Rust. Define rules with JSONLogic conditions, execute actions, and chain workflows."
= "README.md"
= "https://github.com/GoPlasmatic/dataflow-rs"
= "https://github.com/GoPlasmatic/dataflow-rs"
= ["rules-engine", "ifttt", "automation", "jsonlogic", "workflow"]
= ["data-structures", "development-tools", "config"]
# docs.rs renders the operator families so their operator docs resolve.
# `wasm-web` is deliberately excluded — it is a platform switch, not API
# surface — which is why this is an explicit list rather than `all-features`.
[]
= ["all-operators"]
[]
= []
# Optional `datalogic-rs` operator families, each forwarding to the identically
# named feature there. The names deliberately mirror datalogic's so they need no
# translation when reading its documentation.
#
# NOTE `error-handling` here means the JSONLogic `try`/`throw` *operators*. It
# has nothing to do with dataflow-rs's own error handling (`DataflowError`,
# `continue_on_error`, `message.errors()`), which is unconditional.
#
# datetime datetime, timestamp, parse_date, format_date, date_diff, now
# ext-string length, starts_with, ends_with, upper, lower, trim, split
# ext-array sort, slice
# ext-math abs, ceil, floor
# ext-control exists, ??, switch (alias match), type
# error-handling try, throw
#
# Off by default, and enabling one is *not* a no-op for existing workflows: this
# crate always runs datalogic in templating mode, where an unknown operator name
# passes through as literal data. A `{"length": ...}` value that used to survive
# a `map` mapping intact starts evaluating instead. `datetime` goes further and
# changes `==` and the ordering operators on plain date-shaped strings. Enable
# only the families your rules actually use.
= ["datalogic-rs/datetime"]
= ["datalogic-rs/ext-string"]
= ["datalogic-rs/ext-array"]
= ["datalogic-rs/ext-math"]
= ["datalogic-rs/ext-control"]
= ["datalogic-rs/error-handling"]
# Every family this crate exposes. Deliberately not datalogic's `flagd`
# (`fractional`, `sem_ver`): it is feature-flag-evaluation specific, and it is
# the only family that pulls an extra dependency. Adding a family here later is
# a semver-minor change.
= [
"datetime",
"ext-string",
"ext-array",
"ext-math",
"ext-control",
"error-handling",
]
# `uuid/js` is what supplies randomness on wasm32-unknown-unknown: uuid's own
# `getrandom` dependency is target-gated *off* for that triple, and its `js`
# feature routes through wasm-bindgen/js-sys instead.
#
# `datalogic-rs/wasm-clock` forwards `chrono?/wasmbind` — weak, so it is a no-op
# unless `datetime` turned datalogic's optional chrono on. It is redundant today
# with `chrono/wasmbind` above (both dependents resolve to one chrono unit and
# cargo unions their feature sets), but it states the requirement at the crate
# that actually has it, so datalogic's `now` keeps working on wasm32 even if
# this crate's own chrono edge later changes shape.
= ["chrono/wasmbind", "uuid/js", "datalogic-rs/wasm-clock"]
[]
= { = "1.0", = ["derive", "rc"] }
= "1.0"
= { = "5.1", = ["serde_json", "templating"] }
= { = "datavalue-rs", = "0.2.3", = ["serde", "serde_json"] }
= "3.20"
= { = "1.24", = false, = ["v7", "std"] }
= { = "0.4", = false, = ["clock", "std", "serde"] }
= "2.0"
= "0.4"
= { = "1", = ["rt", "macros"] }
= "0.1"
= { = "0.41", = ["serialize"] }
[]
= { = "1", = ["full", "test-util"] }
= "0.11"
= "0.8"
= "0.3"
= "1.17"
[]
= [".", "wasm", "docs-tests"]
[]
= { = "1", = ["rt-multi-thread"] }
# `fast-rng`: thread-local PRNG seeded once from the OS instead of one
# `getrandom` syscall per `Uuid::now_v7()` — appropriate for v7 ids
# (uniqueness, not secrecy). Native-only; features are additive per-target,
# so the wasm build keeps the lean `v7`+`std` set from the main table.
= { = "1.24", = false, = ["fast-rng"] }
# Native release profile: maximize throughput. `lto = "fat"` plus
# `codegen-units = 1` lets the compiler propagate inlining across crate
# boundaries — load-bearing for the JSONLogic eval hot path.
[]
= 3
= "fat"
= 1
# WASM-specific override: keep the size-optimized build for `dataflow-wasm`
# (the cdylib produces a smaller `.wasm` artifact with `opt-level = "s"`).
# Native consumers of `dataflow-rs` get `opt-level = 3` above.
[]
= "s"