def METHOD_NAME(self, action):
    if isinstance(action, RecordStart):
        self._push_and_adjust(action)
    elif isinstance(action, RecordEnd):
        self._pop()
    elif isinstance(action, FieldStart):
        self.read_object_key(action.field_name)
    elif isinstance(action, FieldEnd) or isinstance(action, UnionEnd):
        # TODO: Do we need a FieldEnd and UnionEnd symbol?
        pass
    else:
        raise Exception(f"cannot handle: {action}")