docs: def bind(self, **config):
          """
          Bind all unbound types to the engine.
  
          Bind each unbound typedef to the engine, passing in the engine and
          :attr:`config`.  The resulting ``load`` and ``dump`` functions can
          be found under ``self.bound_types[typedef]["load"]`` and
          ``self.bound_types[typedef]["dump"], respectively.
  
          Parameters
          ----------
          config : dict, optional
              Engine-binding configuration to pass to each typedef that will be
              bound.  Examples include floating-point precision values, maximum
              lengths for strings, or any other translation constraints/settings
              that a typedef needs to construct a load/dump function pair.
  
          """
          while self.unbound_types:
              typedef = self.unbound_types.pop()
              try:
                  load, dump = typedef.bind(self, **config)
                  self.bound_types[typedef] = {
                      "load": load, "dump": dump
                  }
              except Exception:
                  self.unbound_types.add(typedef)
                  raise