Using a builder api with a custom function doesn't look right to me so we would have to expose all the methods as args.

I think I prefer the current technique.