rfcs/2020-08-04-3325-remap-v2.md
This RFC covers incremental changes to the remap mapping syntax. Previous RFC for context: https://github.com/vectordotdev/vector/blob/master/rfcs/2020-07-21-2744-remap-syntax.md
We have a remap transform that allows basic mutation operations:
.foo = .bar
del(.bar)
.baz = "something static"
However, large mappings almost always require conditional logic and implementing this with the swimlanes transform introduces complexity to a config. Ideally, we want to be able to express conditional mappings directly within the remap transform using an if statement.
Within a remap mapping it's possible to perform mappings conditionally using an if statement:
if .bar != null {
.foo = .bar
del(.bar)
}
.baz = "something static"
When the if logical argument resolves to true the mapping statements within the block are executed, otherwise they are not. An else block can be added, where the contents are executed when the argument resolves to false:
if .bar != null {
.foo = .bar
del(.bar)
} else {
.foo = "bar doesn't exist"
}
.baz = "something static"
Sometimes it might be more convenient to express if statements as an expression for assigning to a value:
.content = if .type == "foo" { .foo.content } else { .bar.body }
In which case each block must contain a query. It would be possible to expand this to allow assignments within the block but we need to think through and experiment with the issues of mutating context and how we'd document the behavior we choose.
if statements, this is the lowest hanging fruit in terms of implementation and documentation and unblocks the majority of use cases.if statements which can exist on the right-hand side of an assignment.if statement blocks. This could potentially become an RFC of its own.