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
use crate::startup::{Certs, Protocol};
use std::net::SocketAddr;
use thiserror::Error;

#[derive(Debug, Error)]
pub enum Error {
    #[error("Malformed proxy address: {0}")]
    Proxy(String),
    #[error("Malformed vit address: {0}")]
    VitStation(String),
    #[error("Malformed node rest address: {0}")]
    NodeRest(String),
}

pub struct ProxyServerStub {
    protocol: Protocol,
    address: String,
    vit_address: String,
    node_rest_address: String,
    block0: Vec<u8>,
}

impl ProxyServerStub {
    pub fn new_https(
        certs: Certs,
        address: String,
        vit_address: String,
        node_rest_address: String,
        block0: Vec<u8>,
    ) -> Self {
        Self::new(
            certs.into(),
            address,
            vit_address,
            node_rest_address,
            block0,
        )
    }

    pub fn new_http(
        address: String,
        vit_address: String,
        node_rest_address: String,
        block0: Vec<u8>,
    ) -> Self {
        Self::new(
            Default::default(),
            address,
            vit_address,
            node_rest_address,
            block0,
        )
    }

    pub fn protocol(&self) -> &Protocol {
        &self.protocol
    }

    pub fn new(
        protocol: Protocol,
        address: String,
        vit_address: String,
        node_rest_address: String,
        block0: Vec<u8>,
    ) -> Self {
        Self {
            protocol,
            address,
            vit_address,
            node_rest_address,
            block0,
        }
    }

    pub fn block0(&self) -> Vec<u8> {
        self.block0.clone()
    }

    pub fn address(&self) -> String {
        self.address.parse().unwrap()
    }

    pub fn vit_address(&self) -> String {
        self.vit_address.parse().unwrap()
    }

    pub fn node_rest_address(&self) -> String {
        self.node_rest_address.parse().unwrap()
    }

    pub fn base_address(&self) -> SocketAddr {
        self.address.parse().unwrap()
    }

    pub fn http_vit_address(&self) -> String {
        format!("http://{}/", self.vit_address)
    }

    pub fn http_node_address(&self) -> String {
        format!("http://{}/", self.node_rest_address)
    }
}