Detect type of the `marc_xml`. Call proper callback.

    Args:
        marc_xml (str): Filename or XML string. Don't use ``\\n`` in case of
                        filename.
        mono_callback (fn reference): Callback in case of monographic
                      publications.
        multimono_callback (fn reference): Callback used in case of
                           multi-monographic publications.
        periodical_callback (fn reference): Callback used in case of periodical
                            publications.

    Returns:
        obj: Content returned by the callback.

    Raises:
        ValueError: In case that type couldn't be detected.

def type_decisioner(marc_xml, mono_callback, multimono_callback,
                    periodical_callback):
    """
    Detect type of the `marc_xml`. Call proper callback.

    Args:
        marc_xml (str): Filename or XML string. Don't use ``\\n`` in case of
                        filename.
        mono_callback (fn reference): Callback in case of monographic
                      publications.
        multimono_callback (fn reference): Callback used in case of
                           multi-monographic publications.
        periodical_callback (fn reference): Callback used in case of periodical
                            publications.

    Returns:
        obj: Content returned by the callback.

    Raises:
        ValueError: In case that type couldn't be detected.
    """
    marc_xml = _read_content_or_path(marc_xml)
    record = MARCXMLRecord(marc_xml)

    if record.is_monographic or record.is_single_unit:
        return mono_callback()
    elif record.is_multi_mono:
        return multimono_callback()
    elif record.is_continuing:
        return periodical_callback()

    raise ValueError("Can't identify type of the `marc_xml`!")