Utility method to remove the first converter of this chain. If inplace is True, this object is modified and
        None is returned. Otherwise, a copy is returned

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

def remove_first(self, inplace: bool = False):
        """
        Utility method to remove the first converter of this chain. If inplace is True, this object is modified and
        None is returned. Otherwise, a copy is returned

        :param inplace: boolean indicating whether to modify this object (True) or return a copy (False)
        :return: None or a copy with the first converter removed
        """
        if len(self._converters_list) > 1:
            if inplace:
                self._converters_list = self._converters_list[1:]
                # update the current source type
                self.from_type = self._converters_list[0].from_type
                return
            else:
                new = copy(self)
                new._converters_list = new._converters_list[1:]
                # update the current source type
                new.from_type = new._converters_list[0].from_type
                return new
        else:
            raise ValueError('cant remove first: would make it empty!')