def deconstruct(name):
    '''Deconstruct a queue-name to a set of arguments'''
    name = coerce_unicode(name, _c.FSQ_CHARSET)
    new_arg = sep = u''
    args = []
    # can't get delimiter, if string is empty
    if 1 > len(name):
        raise FSQMalformedEntryError(errno.EINVAL, u'cannot derive delimiter'\
                                     u'from: {0}'.format(name))

    delimiter, encodeseq = delimiter_encodeseq(name[0], _c.FSQ_ENCODE,
                                               _c.FSQ_CHARSET)
    # edge case, no args
    if 1 == len(name):
        return delimiter, args

    # normal case
    encoding_trg = sep
    for c in name[1:]:
        if 3 == len(encoding_trg):
            encoding_trg = sep
        if c == encodeseq or len(encoding_trg):
            encoding_trg = sep.join([encoding_trg, c])
        elif c == delimiter:
            # at delimiter, append and reset working arg
            args.append(decode(new_arg, delimiter=delimiter,
                               encodeseq=encodeseq))
            new_arg = sep
            continue

        new_arg = sep.join([new_arg, c])

    # append our last arg
    args.append(decode(new_arg, delimiter=delimiter, encodeseq=encodeseq))
    return delimiter, args