docs: def var(
      type=None,  # noqa
      default=None,
      name=None,
      title=None,
      description=None,
      required=True,
      examples=None,
      encoder=None,
      decoder=None,
      min=None,  # noqa
      max=None,  # noqa
      unique=None,
      contains=None,
      **kwargs,
  ):
      """ Creates a config variable.
  
      Use this method to create the class variables of your
      :func:`config <file_config._file_config.config>` decorated class.
  
      >>> import file_config
      >>> @file_config.config
          class MyConfig(object):
              name = file_config.var(str)
  
      :param type type: The expected type of the variable, defaults to None, optional
      :param default: The default value of the var, defaults to None, optional
      :param str name: The serialized name of the variable, defaults to None, optional
      :param str title: The validation title of the variable, defaults to None, optional
      :param str description: The validation description of the variable,
          defaults to None, optional
      :param bool required: Flag to indicate if variable is required during validation,
          defaults to True, optional
      :param list examples: A list of validation examples, if necessary,
          defaults to None, optional
      :param encoder: The encoder to use for the var, defaults to None, optional
      :param decoder: The decoder to use for the var, defaults to None, optional
      :param int min: The minimum constraint of the variable, defaults to None, optional
      :param int max: The maximum constraint of the variable, defaults to None, optional
      :param bool unique: Flag to indicate if variable should be unique,
          may not apply to all variable types, defaults to None, optional
      :param contains: Value that list varaible should contain in validation,
          may not apply to all variable types, defaults to None, optional
      :return: A new config variable
      :rtype: attr.Attribute
      """
  
      # NOTE: this method overrides some of the builtin Python method names on purpose in
      # order to supply a readable and easy to understand api
      # In this case it is not dangerous as they are only overriden in the scope and are
      # never used within the scope
      kwargs.update(dict(default=default, type=type))
      return attr.ib(
          metadata={
              CONFIG_KEY: _ConfigEntry(
                  type=type,
                  default=default,
                  name=name,
                  title=title,
                  description=description,
                  required=required,
                  examples=examples,
                  encoder=encoder,
                  decoder=decoder,
                  min=min,
                  max=max,
                  unique=unique,
                  contains=contains,
              )
          },
          **kwargs,
      )