docs: def hook(*hook_patterns):
      """
      Register the decorated function to run when the current hook matches any of
      the ``hook_patterns``.
  
      This decorator is generally deprecated and should only be used when
      absolutely necessary.
  
      The hook patterns can use the ``{interface:...}`` and ``{A,B,...}`` syntax
      supported by :func:`~charms.reactive.bus.any_hook`.
  
      Note that hook decorators **cannot** be combined with :func:`when` or
      :func:`when_not` decorators.
      """
      def _register(action):
          def arg_gen():
              # use a generator to defer calling of hookenv.relation_type, for tests
              rel = endpoint_from_name(hookenv.relation_type())
              if rel:
                  yield rel
  
          handler = Handler.get(action)
          handler.add_predicate(partial(_hook, hook_patterns))
          handler.add_args(arg_gen())
          return action
      return _register