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
use call::server::{RequestContext, UnaryRequestContext};
use call::{BatchContext, Call};
use cq::CompletionQueue;
use server::{self, RequestCallContext};
pub struct Request {
ctx: RequestContext,
}
impl Request {
pub fn new(rc: RequestCallContext) -> Request {
let ctx = RequestContext::new(rc);
Request { ctx }
}
pub fn context(&self) -> &RequestContext {
&self.ctx
}
pub fn resolve(mut self, cq: &CompletionQueue, success: bool) {
let mut rc = self.ctx.take_request_call_context().unwrap();
if !success {
server::request_call(rc, cq);
return;
}
match self.ctx.handle_stream_req(cq, &mut rc) {
Ok(_) => server::request_call(rc, cq),
Err(ctx) => ctx.handle_unary_req(rc, cq),
}
}
}
pub struct UnaryRequest {
ctx: UnaryRequestContext,
}
impl UnaryRequest {
pub fn new(ctx: RequestContext, rc: RequestCallContext) -> UnaryRequest {
let ctx = UnaryRequestContext::new(ctx, rc);
UnaryRequest { ctx }
}
pub fn batch_ctx(&self) -> &BatchContext {
self.ctx.batch_ctx()
}
pub fn request_ctx(&self) -> &RequestContext {
self.ctx.request_ctx()
}
pub fn resolve(mut self, cq: &CompletionQueue, success: bool) {
let mut rc = self.ctx.take_request_call_context().unwrap();
if !success {
server::request_call(rc, cq);
return;
}
let data = self.ctx.batch_ctx().recv_message();
self.ctx
.handle(&mut rc, cq, data.as_ref().map(|v| v.as_slice()));
server::request_call(rc, cq);
}
}
pub struct Abort {
ctx: BatchContext,
_call: Call,
}
impl Abort {
pub fn new(call: Call) -> Abort {
Abort {
ctx: BatchContext::new(),
_call: call,
}
}
pub fn batch_ctx(&self) -> &BatchContext {
&self.ctx
}
}