min_length: minimum length of the argument's value
max_length: maximum length of the argument's value
check_type: a predicate function, that must return TRUE on the argument's value.
convert_if_possible: if given, a lambda can be given similar to check_type This lambda would be used to try a conversion. If a conversion fails (returns NA, where the input was not `util_empty'), an error is still thrown, the data is converted, otherwise
conversion_may_replace_NA: if set to TRUE, we can define a function in convert_if_possible that replaces NA values without causing a warning, but this option is set to FALSE by default to catch possible conversion problems (use it with caution).
dont_assign: set TRUE to keep x in the caller environment untouched
error_message: if check_type() returned FALSE, show this instead of a default error message.
Returns
the value of arg_name -- but this is updated in the calling frame anyway.