I wonder why is Subscription->publications a list of String rather than a list of C strings. That's something you'd see in a Node structure, but Subscription is not a node, so this seems wasteful and pointless.
I looked more into this and came to know that we can't make
Subscription->publications a list of C strings because input publications
list is also in the list of String from the parser:
name_list: name { $$ = list_make1(makeString($1)); } | name_list ',' name { $$ = lappend($1, makeString($3)); };
Oh, we also have textarray_to_strvaluelist() which is essentially identical, but also static. If we're making one of them non-static, then for sure let's remove the other one. But maybe what we really need is a third one to use in ruleutils, and expose neither? (I think if we get rid of the String around Subscription->publications, that's likely what I'd do, since they'd be mostly trivial wrappers around deconstruct_array_builtin.)
I think we really need a third one to use in ruleutils, and expose neither.