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
use serde::{Deserialize, Serialize};

pub const HANDSHAKE_TOKEN: [u8; 32] = [
    101, 114, 101, 98, 117, 115, 119, 105, 115, 112, 101, 114, 115, 102, 105,
    110, 100, 103, 114, 97, 115, 112, 100, 101, 101, 112, 119, 105, 116, 104, 105, 110,
];

#[derive(Serialize, Deserialize, Debug)]
pub enum ErebusRequestType {
    #[serde(rename = "auth")]
    Authenticate,
    #[serde(rename = "obj")]
    ObjectCache,
    #[serde(rename = "url")]
    UrlCache,
}

#[derive(Serialize, Deserialize, Debug)]
pub struct ObjectCacheRequest {
    pub name: String,
    pub tags: Vec<String>,
    pub body: Option<String>,
}

#[derive(Serialize, Deserialize, Debug)]
pub struct UrlCacheRequest {
    pub method: String,
    pub url: String,
    pub headers: Vec<(String, String)>,
    pub body: Option<String>,
}

#[derive(Serialize, Deserialize, Debug)]
pub enum ErebusPackedRequest {
    #[serde(rename = "auth")]
    Authenticate(Vec<u8>),
    #[serde(rename = "obj")]
    ObjectCache(ObjectCacheRequest),
    #[serde(rename = "url")]
    UrlCache(UrlCacheRequest),
}

#[derive(Serialize, Deserialize, Debug)]
pub enum ErebusResponse {
    Proceed,
    Error(String),
    Success(Vec<u8>),
}

pub type ObjectCacheResponse = Option<String>;
pub type UrlCacheResponse = (u16, std::collections::HashMap<String, String>, String);