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
use paste::paste;
pub use super::super::{router, Error, Response};
pub type HandleReqReturn<T> = Result<super::tmch_proto::TMCHCommandType, Response<T>>;
macro_rules! router {
($($n:ident, $req_handle:path, $res_handle:path);*) => {
#[derive(Default, Debug)]
pub struct Router {}
impl router::InnerRouter<()> for Router {
type Request = super::tmch_proto::TMCHCommandType;
type Response = super::tmch_proto::TMCHResponse;
paste! {
$(fn [<$n _request>](&mut self, client: &(), req: &router::[<$n Request>], _command_id: uuid::Uuid) -> HandleReqReturn<router::[<$n Response>]> {
$req_handle(client, &req)
})*
$(fn [<$n _response>](&mut self, return_path: router::Sender<router::[<$n Response>]>, response: Self::Response) {
let _ = if !response.is_success() {
if response.is_server_error() {
return_path.send(Err(Error::Err(format!("Server error: {}", response.response_msg()))))
} else {
return_path.send(Err(Error::Err(response.response_msg())))
}
} else {
let trans_id = router::CommandTransactionID {
client: response.transaction_id.client_transaction_id.as_deref().unwrap_or_default().to_owned(),
server: response.transaction_id.server_transaction_id.to_owned(),
};
match $res_handle(response) {
Ok(r) => return_path.send(Ok(router::CommandResponse {
response: r,
extra_values: vec![],
transaction_id: Some(trans_id),
})),
Err(e) => return_path.send(Err(e))
}
};
})*
}
}
}
}
fn request_nop<T, R>(_client: &(), _req: &T) -> HandleReqReturn<R> {
Err(Response::Err(Error::Unsupported))
}
fn response_nop<T, R>(_response: T) -> Result<R, Error> {
Err(Error::Unsupported)
}
router!(
Logout, super::handle_logout, super::handle_logout_response;
Poll, super::poll::handle_poll, super::poll::handle_poll_response;
PollAck, super::poll::handle_poll_ack, super::poll::handle_poll_ack_response;
DomainCheck, request_nop, response_nop;
DomainClaimsCheck, request_nop, response_nop;
DomainTrademarkCheck, request_nop, response_nop;
DomainInfo, request_nop, response_nop;
DomainCreate, request_nop, response_nop;
DomainDelete, request_nop, response_nop;
DomainUpdate, request_nop, response_nop;
DomainRenew, request_nop, response_nop;
DomainTransferQuery, request_nop, response_nop;
DomainTransferRequest, request_nop, response_nop;
DomainTransferCancel, request_nop, response_nop;
DomainTransferAccept, request_nop, response_nop;
DomainTransferReject, request_nop, response_nop;
VerisignSync, request_nop, response_nop;
EmailForwardCheck, request_nop, response_nop;
EmailForwardInfo, request_nop, response_nop;
EmailForwardCreate, request_nop, response_nop;
EmailForwardDelete, request_nop, response_nop;
EmailForwardUpdate, request_nop, response_nop;
EmailForwardRenew, request_nop, response_nop;
EmailForwardTransferQuery, request_nop, response_nop;
EmailForwardTransferRequest, request_nop, response_nop;
EmailForwardTransferCancel, request_nop, response_nop;
EmailForwardTransferAccept, request_nop, response_nop;
EmailForwardTransferReject, request_nop, response_nop;
RestoreRequest, request_nop, response_nop;
HostCheck, request_nop, response_nop;
HostInfo, request_nop, response_nop;
HostCreate, request_nop, response_nop;
HostDelete, request_nop, response_nop;
HostUpdate, request_nop, response_nop;
ContactCheck, request_nop, response_nop;
ContactInfo, request_nop, response_nop;
ContactCreate, request_nop, response_nop;
ContactDelete, request_nop, response_nop;
ContactUpdate, request_nop, response_nop;
ContactTransferQuery, request_nop, response_nop;
ContactTransferRequest, request_nop, response_nop;
ContactTransferAccept, request_nop, response_nop;
ContactTransferReject, request_nop, response_nop;
NominetTagList, request_nop, response_nop;
NominetAccept, request_nop, response_nop;
NominetReject, request_nop, response_nop;
NominetRelease, request_nop, response_nop;
NominetContactValidate, request_nop, response_nop;
NominetLock, request_nop, response_nop;
NominetUnlock, request_nop, response_nop;
Balance, request_nop, response_nop;
MaintenanceList, request_nop, response_nop;
MaintenanceInfo, request_nop, response_nop;
EURIDHitPoints, request_nop, response_nop;
EURIDRegistrationLimit, request_nop, response_nop;
EURIDDNSSECEligibility, request_nop, response_nop;
EURIDDNSQuality, request_nop, response_nop;
TMCHCheck, super::mark::handle_check, super::mark::handle_check_response;
TMCHCreate, super::mark::handle_create, super::mark::handle_create_response;
TMCHMarkInfo, super::mark::handle_mark_info, super::mark::handle_mark_info_response;
TMCHMarkSMDInfo, super::mark::handle_mark_smd_info, super::mark::handle_mark_smd_info_response;
TMCHMarkEncodedSMDInfo, super::mark::handle_mark_encoded_smd_info, super::mark::handle_mark_encoded_smd_info_response;
TMCHMarkFileInfo, super::mark::handle_mark_file_info, super::mark::handle_mark_file_info_response;
TMCHUpdate, super::mark::handle_update, super::mark::handle_update_response;
TMCHRenew, super::mark::handle_renew, super::mark::handle_renew_response;
TMCHTransferInitiate, super::mark::handle_transfer_initiate, super::mark::handle_transfer_initiate_response;
TMCHTransfer, super::mark::handle_transfer, super::mark::handle_transfer_response;
TMCHTrexActivate, super::trex::handle_trex_activate, super::trex::handle_trex_activate_response;
TMCHTrexRenew, super::trex::handle_trex_renew, super::trex::handle_trex_renew_response;
DACDomain, request_nop, response_nop;
DACUsage, request_nop, response_nop;
DACLimits, request_nop, response_nop;
Hello, request_nop, response_nop
);