def get_route_io_data_types_for_route(self, route):<EOL>
data_types = set()  <EOL>for dtype in (route.arg_data_type, route.result_data_type, route.error_data_type):<EOL><INDENT>while is_list_type(dtype) or is_nullable_type(dtype):<EOL><INDENT>data_list_type = dtype  <EOL>dtype = data_list_type.data_type<EOL><DEDENT>if is_composite_type(dtype) or is_alias(dtype):<EOL><INDENT>data_user_type = dtype  <EOL>data_types.add(data_user_type)<EOL><DEDENT><DEDENT>return data_types<EOL>
Given a route, returns a set of its argument/result/error datatypes.