Alfred output format enhancement proposal

Alfred’s current output format is a custom one which makes it a little more difficult to use by a program because it needs to do some manual parsing. E.g. you cannot simply plug in your favourite json library to load and parse the information into your code.

Here’s a proposal which aims for the following three key benefits:

  • Textual information is displayable in a human readable format.

  • Information is easily usable by a program.

  • Binary data can be inserted, queried and piped on the shell.

Valid UTF8 text only by default

Valid UTF8 text, ASCII, example 1:

Store:

$ cat /etc/hostname | alfred -s 64

Read:

$ alfred -r 64
{
    "fe:f1:00:00:01:01" : "OpenWRT-node-1\n"
}

Valid UTF8 text, ASCII, example 2:

Store:

$ echo -n "\x00" | alfred -s 64

Read:

$ alfred -r 64
{
    "fe:f1:00:00:01:01" : "\u0000"
}

Valid UTF8 text, non-ASCII:

Store:

$ echo -n "\xe2\x98\xae" |  alfred -s 64

Read:

$ alfred -r 64
{
    "fe:f1:00:00:01:01" : "☮"
}

On non-UTF8 data:

Simply fail with an error return code and message, example:

Store:

$ echo -n "\x80" | alfred -s 64
Invalid UTF8 input! Consider using --binary

Binary mode switch

Store:

$ cat /tmp/binary/file.in | alfred -s 64 --binary

Read:

$ alfred -r 64
{
    "fe:f1:00:00:01:01" : "tIerwaEjNjY="
}
$ alfred -r 64 --binary "fe:f1:00:00:01:01" > /tmp/binary/file.out

So ‘$ alfred -r 64’ displays the data in base64 (or some other suitable, json string compatible format).

Namespaces

Store:

$ cat /etc/hostname | alfred -s 64 -n "hostname"
$ echo -n "v42" | alfred -s 64 -n "version"
$ echo -n "\xe2\x98\xae" | alfred -s 64 -n "alignment"
$ cat /tmp/cake.pdf | alfred -s 64 -n "cake.pdf" --binary
$ tar -cf - /etc | xz -c | alfred -s 64 -n "config-backup" --binary

Read:

$ alfred -r 64
{
    "fe:f1:00:00:01:01" : {
        "hostname" : "OpenWRT-node-1\n",
        "version" : "v42",
        "alignment" : "☮",
        "cake.pdf" : "VGhlIGNha2UgaXMgYSBsaWUhCg==",
        "config-backup" : "Wxj5fsra7gGLuD3VJf0aBsfmi2HEpTn+ZuAhJ0tyom1hX11vxqJDJn1q/Md+tDKUyLI="
    }
}
$ alfred -r 64 -n "cake.pdf" --binary "fe:f1:00:00:01:01" > /tmp/lie.txt
$ alfred -r 64 -n "config-backup" --binary "fe:f1:00:00:01:01" | xz -dc > /tmp/etc.tar