1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
use super::*;

/// <https://vk.com/dev/objects/attachments_w>
#[derive(Deserialize, Clone, Debug)]
pub struct WallAttachment {
    #[serde(rename = "type")]
    pub type_: String,

    // type = photo
    pub photo: Option<photo::Photo>,

    // type = posted_photo
    pub posted_photo: Option<PostedPhoto>,

    // type = video
    pub video: Option<video::Video>,

    // type = audio
    pub audio: Option<audio::Audio>,

    // type = doc
    pub doc: Option<document::Document>,

    // type = graffiti
    pub graffiti: Option<Graffiti>,

    // type = link
    pub link: Option<link::Link>,

    // type = note
    pub note: Option<note::Note>,

    // type = app
    pub app: Option<App>,

    // type = poll
    pub poll: Option<poll::Poll>,

    // type = page
    pub page: Option<page::Page>,

    // type = album
    pub album: Option<photo::Album>,

    // type = photos_list
    pub photos_list: Option<Vec<String>>,

    // type = market
    pub market: Option<market_item::MarketItem>,

    // type = market_album
    pub market_album: Option<market_album::MarketAlbum>,

    // type = sticker
    pub sticker: Option<sticker::Sticker>,

    // type = pretty_cards
    pub cards: Option<Vec<Card>>,
}

/// For posts created before 2013
#[derive(Deserialize, Clone, Debug)]
pub struct PostedPhoto {
    pub id: Integer,
    pub owner_id: Integer,
    pub photo_130: String,
    pub photo_604: String,

    /// Access key may be present in attachments
    /// (
    /// <https://vk.com/dev/objects/attachments_w>
    /// or
    /// <https://vk.com/dev/objects/attachments_m>
    /// )
    pub access_key: Option<String>,
}

/// For posts created before 2013
#[derive(Deserialize, Clone, Debug)]
pub struct Graffiti {
    pub id: Integer,
    pub owner_id: Integer,
    pub photo_130: String,
    pub photo_604: String,

    /// Access key may be present in attachments
    /// (
    /// <https://vk.com/dev/objects/attachments_w>
    /// or
    /// <https://vk.com/dev/objects/attachments_m>
    /// )
    pub access_key: Option<String>,
}

/// For posts created before 2013
#[derive(Deserialize, Clone, Debug)]
pub struct App {
    pub id: Integer,
    pub name: String,
    pub photo_130: String,
    pub photo_604: String,

    /// Access key may be present in attachments
    /// (
    /// <https://vk.com/dev/objects/attachments_w>
    /// or
    /// <https://vk.com/dev/objects/attachments_m>
    /// )
    pub access_key: Option<String>,
}

#[derive(Deserialize, Clone, Debug)]
pub struct Card {
    pub card_id: String,
    pub link_url: String,
    pub title: String,
    pub images: Vec<photo::Image>,
    pub button: button::Button,
    pub price: String,
    pub price_old: Option<String>,
}

/// <https://vk.com/dev/objects/attachments_m>
#[derive(Deserialize, Clone, Debug)]
pub struct MessageAttachment {
    #[serde(rename = "type")]
    pub type_: String,

    // type = photo
    pub photo: Option<photo::Photo>,

    // type = video
    pub video: Option<video::Video>,

    // type = audio
    pub audio: Option<audio::Audio>,

    // type = doc
    pub doc: Option<document::Document>,

    // type = link
    pub link: Option<link::Link>,

    // type = market
    pub market: Option<market_item::MarketItem>,

    // type = market_album
    pub market_album: Option<market_album::MarketAlbum>,

    // type = wall
    pub wall: Option<post::Post>,

    // type = wall_reply
    pub wall_reply: Option<comment::Comment>,

    // type = sticker
    pub sticker: Option<sticker::Sticker>,

    // type = gift
    pub gift: Option<gift::Gift>,
}