syntax = "proto2";

message AppInfo {
    optional string identifier = 0x1;
    optional int32 version_int = 0x2;
}

message AppInfoList {
    repeated AppInfo items = 0x1;
}

message SemanticVersion {
    optional int32 major = 0x1;
    optional int32 minor = 0x2;
    optional int32 patch = 0x3;
}

message RequestHeader {
    optional string market = 0x1;
    optional Platform platform = 0x2;
    enum Platform {
        WIN32_X86 = 0x0;
        OSX_X86 = 0x1;
        LINUX_X86 = 0x2;
        IPHONE_ARM = 0x3;
        SYMBIANS60_ARM = 0x4;
        OSX_POWERPC = 0x5;
        ANDROID_ARM = 0x6;
        WINCE_ARM = 0x7;
        LINUX_X86_64 = 0x8;
        OSX_X86_64 = 0x9;
        PALM_ARM = 0xa;
        LINUX_SH = 0xb;
        FREEBSD_X86 = 0xc;
        FREEBSD_X86_64 = 0xd;
        BLACKBERRY_ARM = 0xe;
        SONOS_UNKNOWN = 0xf;
        LINUX_MIPS = 0x10;
        LINUX_ARM = 0x11;
        LOGITECH_ARM = 0x12;
        LINUX_BLACKFIN = 0x13;
        ONKYO_ARM = 0x15;
        QNXNTO_ARM = 0x16;
        BADPLATFORM = 0xff;
    }
    optional AppInfoList app_infos = 0x6;
    optional string bridge_identifier = 0x7;
    optional SemanticVersion bridge_version = 0x8;
    optional DeviceClass device_class = 0x9;
    enum DeviceClass {
        DESKTOP = 0x1;
        TABLET = 0x2;
        MOBILE = 0x3;
        WEB = 0x4;
        TV = 0x5;
    }
}

message AppItem {
    optional string identifier = 0x1;
    optional Requirement requirement = 0x2;
    enum Requirement {
        REQUIRED_INSTALL = 0x1;
        LAZYLOAD = 0x2;
        OPTIONAL_INSTALL = 0x3;
    }
    optional string manifest = 0x4;
    optional string checksum = 0x5;
    optional string bundle_uri = 0x6;
    optional string small_icon_uri = 0x7;
    optional string large_icon_uri = 0x8;
    optional string medium_icon_uri = 0x9;
    optional Type bundle_type = 0xa;
    enum Type {
        APPLICATION = 0x0;
        FRAMEWORK = 0x1;
        BRIDGE = 0x2;
    }
    optional SemanticVersion version = 0xb;
    optional uint32 ttl_in_seconds = 0xc;
    optional IdentifierList categories = 0xd;
}

message AppList {
    repeated AppItem items = 0x1;
}

message IdentifierList {
    repeated string identifiers = 0x1;
}

message BannerConfig {
    optional string json = 0x1;
}

