vkapi2 0.4.3

vk api wrapper for rust
Documentation
use serde::{Deserialize, Serialize};

#[derive(Deserialize, Debug)]
pub struct GetLinkStatsResponse {
    pub key: String,
    pub stats: Vec<Stats>,
}

#[derive(Deserialize, Debug)]
pub struct Stats {
    pub timestamp: usize,
    pub views: usize,
    pub cities: Option<Vec<City>>,
    pub countries: Option<Vec<Country>>,
    pub sex_age: Option<Vec<SexAge>>,
}

#[derive(Deserialize, Debug)]
pub struct City {
    pub city_id: i64,
    pub views: usize,
}

#[derive(Deserialize, Debug)]
pub struct Country {
    pub country_id: i64,
    pub views: usize,
}

#[derive(Deserialize, Debug)]
pub struct SexAge {
    pub age_range: String,
    pub male: usize,
    pub female: usize,
}

pub struct GetLinkStatsOptions {
    pub access_key: String,
    pub interval: Interval,
    pub intervals_count: usize,
    pub extended: bool,
}

pub enum Interval {
    Hour,
    Day,
    Week,
    Month,
    Forever,
}

impl Default for GetLinkStatsOptions {
    fn default() -> Self {
        Self {
            access_key: "".to_string(),
            interval: Interval::Hour,
            intervals_count: 1,
            extended: false,
        }
    }
}

#[derive(Serialize, Deserialize, Debug)]
pub struct CheckLinkResponse {
    pub status: String,
    pub link: String,
}

pub enum Private {
    Yes,
    No,
}

#[derive(Serialize, Deserialize, Debug)]
pub struct ResolveScreenNameResponse {
    #[serde(rename = "type")]
    pub type_: ResolveScreenNameType,
    pub object_id: i64,
}

#[derive(Serialize, Deserialize, Debug)]
pub enum ResolveScreenNameType {
    #[serde(rename = "user")]
    User,
    #[serde(rename = "group")]
    Group,
    #[serde(rename = "application")]
    Application,
    #[serde(rename = "page")]
    Page,
    #[serde(rename = "vk_app")]
    VkApp,
}

#[derive(Serialize, Deserialize, Debug)]

pub struct GetLastShortenedLinksResponse {
    pub count: usize,
    pub items: Vec<ShortenedLink>,
}

#[derive(Serialize, Deserialize, Debug)]

pub struct ShortenedLink {
    pub timestamp: usize,
    pub url: String,
    pub short_url: String,
    pub key: String,
    pub views: usize,
    pub access_key: Option<String>,
}

#[derive(Serialize, Deserialize, Debug)]
pub struct GetShortLinkResponse {
    pub short_url: String,
    pub access_key: Option<String>,
    pub key: String,
    pub url: String,
}

impl GetShortLinkResponse {
    pub fn get_statistics_url(&self) -> String {
        return format!(
            "https://vk.com/cc?act=stats&key={}{}",
            &self.short_url[14..],
            match &self.access_key {
                Some(access_key) => format!("&access_key={}", access_key),
                None => "".to_string(),
            }
        );
    }
}