pianod2 JSON Protocol
---------------------

## Response Format

Open questions:

- Should we include outermost request name in response?

### Spontaneous
Option 1:
{
    "notifications": [
        "code": number,
        "status": description,
        (optional) "value": 
    ]
}

Option 2:
{
    "notifications": [
        "event": event-name,
        "eventDescription": event-text,
        (optional) "value": value, if needed/applicable, depending on event
    ]
}


### Command Reply
{
    "notifications": [
        NOTIFICATION... (0 or more)
    ],
    "code": number,
    "status": status-text-for-code,
    "details": status-text-details (nullable),
    "successes": [ // 0 or more
        "code": number,
        "status": status-text-for-code,
        "details": status-text-details (nullable),
        "id": item ID,
        "description": descriptive-text (nullable)
    ],
    "failures": [ // 0 or more
        <same format as as successes>
    ],
}



### Data Reponse
{
    "code": 203,
    "status": "data",
    "data": [
        0 or more records...
    ]
}

User Privileges:
    "privileges": {
        "rank": rank-string,
        "deejay": boolean,
        "request": boolean,
    }

    "ratings": {
        "rating": float,
        "ratingName": rating-text,
        "seed": boolean,
        "albumseed": boolean,
        "artistseed": boolean
    }

    "capabilities": {
        "rate": boolean,
        "seed": boolean,
        "albumseed": boolean,
        "artistseed": boolean
    }

So in general: list all and use booleans, rather than present/not present as in the line protocol.


