The various `add_foo_with_metadata` are a verbose API due to `Option`. For readability purposes, `_with_metadata` and `Option` don't quite align. A fairly simple solution is to have a third (non-pub) fn that does the real work to handle the `Option`.