d71387e7f7
There's one case where we want to create a custom join rule, and thus must parse directly from JSON, but the rest can reuse helpers that already exist.