docs: def encrypt_put_item(encrypt_method, crypto_config_method, write_method, **kwargs):
      # type: (Callable, Callable, Callable, **Any) -> Dict
      # TODO: narrow this down
      """Transparently encrypt an item before putting it to the table.
  
      :param callable encrypt_method: Method to use to encrypt items
      :param callable crypto_config_method: Method that accepts ``kwargs`` and provides a :class:`CryptoConfig`
      :param callable write_method: Method that writes to the table
      :param **kwargs: Keyword arguments to pass to ``write_method``
      :return: DynamoDB response
      :rtype: dict
      """
      crypto_config, ddb_kwargs = crypto_config_method(**kwargs)
      ddb_kwargs["Item"] = encrypt_method(
          item=ddb_kwargs["Item"],
          crypto_config=crypto_config.with_item(_item_transformer(encrypt_method)(ddb_kwargs["Item"])),
      )
      return write_method(**ddb_kwargs)