def get_copiable_service_data(service, *, questions_to_exclude=None, questions_to_copy=None):
    """
    Filter out any service data that shouldn't be copied to a new draft service, by either including
    copyable questions or excluding non-copyable questions.
    There is validation at view-level to prevent both `to_copy` and `to_exclude` lists being supplied, so
    this function should only receive one or the other. However we want to deprecate use of `to_copy`, so
    if both are somehow supplied, we use the `to_exclude` list.
    If neither list is provided, then all data fields on the service are included.

    :param service: service object with a JSON dict `data` attribute (required)
    :param questions_to_exclude: iterable of question IDs that must not be copied
    :param questions_to_copy: iterable of question IDs that may be copied (to be deprecated)
    :return: JSON dict of service data
    """
    if questions_to_exclude:
        return {key: value for key, value in service.data.items() if key not in questions_to_exclude}
    if questions_to_copy:
        return {key: value for key, value in service.data.items() if key in questions_to_copy}
    return service.data