traq-bot-http 0.11.3

Library to parse POST requests of traQ BOT event
Documentation
use crate::payloads::types::{Channel, EmbeddedInfo, TimeStamp, User, Uuid};
use crate::RequestParser;

use http::header::{HeaderMap, CONTENT_TYPE};

pub const VERIFICATION_TOKEN: &str = "traqbotverificationtoken";

pub fn make_parser() -> RequestParser {
    RequestParser::new(VERIFICATION_TOKEN)
}

pub fn make_headers(event: &str) -> HeaderMap {
    let mut headers = HeaderMap::new();
    headers.insert("X-TRAQ-BOT-TOKEN", VERIFICATION_TOKEN.parse().unwrap());
    headers.insert(CONTENT_TYPE, "application/json".parse().unwrap());
    headers.insert("X-TRAQ-BOT-EVENT", event.parse().unwrap());
    headers
}

pub fn timestamp(v: &'static str) -> TimeStamp {
    use serde::de::value::{Error, StrDeserializer};
    let de = StrDeserializer::<'_, Error>::new(v);
    crate::payloads::serde::timestamp::deserialize(de).unwrap()
}

pub fn uuid(v: &'static str) -> Uuid {
    v.parse().unwrap()
}

pub fn takashi_trap() -> User {
    User {
        id: uuid("dfdff0c9-5de0-46ee-9721-2525e8bb3d45"),
        name: "takashi_trap".to_string(),
        display_name: "寺田 健二".to_string(),
        icon_id: uuid("2bc06cda-bdb9-4a68-8000-62f907f36a92"),
        bot: false,
    }
}

pub fn channel_a_po() -> Channel {
    Channel {
        id: uuid("f86c925c-3002-4ba5-939a-c92344e534f9"),
        name: "po".to_string(),
        path: "#a/po".to_string(),
        parent_id: uuid("ea452867-553b-4808-a14f-a47ee0009ee6"),
        creator: takashi_trap(),
        created_at: timestamp("2018-04-25T12:22:02Z"),
        updated_at: timestamp("2018-04-25T12:22:02Z"),
    }
}

pub fn embedded_takashi_trap() -> EmbeddedInfo {
    EmbeddedInfo {
        raw: "@takashi_trap".to_string(),
        r#type: "user".to_string(),
        id: uuid("dfdff0c9-5de0-46ee-9721-2525e8bb3d45"),
    }
}