serenity 0.5.1

A Rust library for the Discord API.
Documentation
extern crate serde_json;
extern crate serenity;

use serde_json::Value;
use serenity::model::guild::{Guild, Role};

#[test]
fn decode_negative_one_role_position() {
    let json = r#"{
        "position": -1,
        "permissions": 37215297,
        "name": "@everyone",
        "mentionable": false,
        "managed": false,
        "id": "444",
        "hoist": false,
        "color": 0
    }"#;

    let value: Value = serde_json::from_str(json).unwrap();

    serde_json::from_value::<Role>(value).unwrap();
}

#[test]
fn decode_guild_with_n1_role_position() {
    let json = r#"{
    "voice_states": [],
    "verification_level": 0,
    "explicit_content_filter": 0,
    "unavailable": false,
    "splash": null,
    "roles": [
      {
        "position": -1,
        "permissions": 37215297,
        "name": "@everyone",
        "mentionable": false,
        "managed": false,
        "id": "1",
        "hoist": false,
        "color": 0
      },
      {
        "position": 1,
        "permissions": 66583679,
        "name": "role",
        "mentionable": false,
        "managed": false,
        "id": "1",
        "hoist": true,
        "color": 7419530
      },
      {
        "position": 2,
        "permissions": 536345727,
        "name": "role 2",
        "mentionable": false,
        "managed": false,
        "id": "17",
        "hoist": true,
        "color": 2123412
      },
      {
        "position": 3,
        "permissions": 66583679,
        "name": "role 3",
        "mentionable": false,
        "managed": false,
        "id": "166",
        "hoist": true,
        "color": 3447003
      },
      {
        "position": 1,
        "permissions": 37215297,
        "name": "aaaaaa",
        "mentionable": true,
        "managed": false,
        "id": "88",
        "hoist": false,
        "color": 15277667
      },
      {
        "position": 1,
        "permissions": 35840,
        "name": "aaaabsadfasda",
        "mentionable": false,
        "managed": true,
        "id": "643534543",
        "hoist": false,
        "color": 0
      }
    ],
    "region": "us-central",
    "presences": [
      {
        "user": {
          "id": "2342342"
        },
        "status": "online",
        "game": null
      },
      {
        "user": {
          "id": "1233432"
        },
        "status": "online",
        "game": null
      },
      {
        "user": {
          "id": "35353534"
        },
        "status": "online",
        "game": {
          "url": "",
          "type": 0,
          "name": "aaaaaa"
        }
      },
      {
        "user": {
          "id": "12314324"
        },
        "status": "online",
        "game": null
      }
    ],
    "owner_id": "7",
    "name": "guild name",
    "mfa_level": 0,
    "members": [
      {
        "user": {
          "username": "aaa",
          "id": "92781184873947136",
          "discriminator": "6291",
          "avatar": "asdasdadada"
        },
        "roles": [
          "164155714355462146"
        ],
        "nick": "asdasdadas",
        "mute": false,
        "joined_at": "2017-01-29T15:35:17.136000+00:00",
        "deaf": false
      },
      {
        "user": {
          "username": "aaaaaa",
          "id": "161972119494852608",
          "discriminator": "7653",
          "avatar": "ffffff"
        },
        "roles": [
          "2342432423432"
        ],
        "mute": false,
        "joined_at": "2017-01-29T15:35:17.136000+00:00",
        "deaf": false
      },
      {
        "user": {
          "username": "aaaaa",
          "id": "167333834952540160",
          "discriminator": "0857",
          "bot": true,
          "avatar": "ffffff"
        },
        "roles": [
          "34534543543"
        ],
        "mute": false,
        "joined_at": "2017-01-29T15:35:17.136000+00:00",
        "deaf": false
      },
      {
        "user": {
          "username": "aaaaaaa",
          "id": "171403455745884160",
          "discriminator": "0075",
          "avatar": "ffffff"
        },
        "roles": [
          "56465464"
        ],
        "mute": false,
        "joined_at": "2017-01-29T15:35:17.136000+00:00",
        "deaf": false
      },
      {
        "user": {
          "username": "asdasdsadas",
          "id": "12312312",
          "discriminator": "7181",
          "bot": true,
          "avatar": "ffffff"
        },
        "roles": [
          "12313212321"
        ],
        "nick": null,
        "mute": false,
        "joined_at": "2017-01-29T15:35:17.136000+00:00",
        "deaf": false
      },
      {
        "user": {
          "username": "aaaaa",
          "id": "1231231231",
          "discriminator": "2138",
          "bot": true,
          "avatar": "fake"
        },
        "roles": [
          "1231231312"
        ],
        "nick": null,
        "mute": false,
        "joined_at": "2017-01-29T15:35:17.136000+00:00",
        "deaf": false
      }
    ],
    "member_count": 6,
    "large": false,
    "joined_at": "2017-01-29T15:35:17.136000+00:00",
    "id": "12321321312321",
    "icon": "fake icon",
    "features": [],
    "emojis": [],
    "default_message_notifications": 0,
    "channels": [
      {
        "type": 0,
        "topic": "",
        "position": 0,
        "permission_overwrites": [
          {
            "type": "role",
            "id": "123131231321",
            "deny": 0,
            "allow": 0
          }
        ],
        "name": "asdadsa",
        "last_message_id": "5676576575",
        "id": "3453543543"
      },
      {
        "user_limit": 0,
        "type": 2,
        "position": 0,
        "permission_overwrites": [],
        "name": "adssadasda",
        "id": "56464564645",
        "bitrate": 63841
      },
      {
        "user_limit": 0,
        "type": 2,
        "position": 1,
        "permission_overwrites": [
          {
            "type": "role",
            "id": "23423432423",
            "deny": 2097152,
            "allow": 0
          }
        ],
        "name": "AFK",
        "id": "23432434242",
        "bitrate": 64000
      },
      {
        "type": 0,
        "topic": null,
        "position": 1,
        "permission_overwrites": [],
        "name": "asdasdasdsa",
        "last_message_id": "234324324242",
        "id": "2342343243242"
      },
      {
        "user_limit": 0,
        "type": 2,
        "position": 2,
        "permission_overwrites": [],
        "name": "asdadsa",
        "id": "32134242342",
        "bitrate": 96000
      }
    ],
    "afk_timeout": 900,
    "afk_channel_id": "23432423423",
    "system_channel_id": null
  }"#;

    let value: Value = serde_json::from_str(json).unwrap();

    serde_json::from_value::<Guild>(value).unwrap();
}