def add_conversion_step(self, converter: Converter[S, T], inplace: bool = False):
<EOL>if self.is_generic() and converter.is_generic():<EOL><INDENT>raise ValueError('<STR_LIT>')<EOL><DEDENT>elif converter.can_be_appended_to(self, self.strict):<EOL><INDENT>if inplace:<EOL><INDENT>self._converters_list.append(converter)<EOL>self.to_type = converter.to_type<EOL>return<EOL><DEDENT>else:<EOL><INDENT>new = copy(self)<EOL>new._converters_list.append(converter)<EOL>new.to_type = converter.to_type<EOL>return new<EOL><DEDENT><DEDENT>else:<EOL><INDENT>raise TypeError('<STR_LIT>' +<EOL>get_pretty_type_str(converter.from_type)<EOL>+ '<STR_LIT>' +<EOL>get_pretty_type_str(self.to_type) + '<STR_LIT>'<EOL>+ ('<STR_LIT>' if self.strict else '<STR_LIT>') + '<STR_LIT>')<EOL><DEDENT>
Utility method to add a converter to this chain. If inplace is True, this object is modified and
None is returned. Otherwise, a copy is returned

:param converter: the converter to add
:param inplace: boolean indicating whether to modify this object (True) or return a copy (False)
:return: None or a copy with the converter added