inve_etcd/watch/
watch.rs

1use crate::proto::etcdserverpb;
2use crate::proto::etcdserverpb::watch_request::RequestUnion;
3use crate::{Event, KeyRange, ResponseHeader};
4
5#[derive(Debug)]
6pub struct WatchCreateRequest {
7    proto: crate::proto::etcdserverpb::WatchCreateRequest,
8}
9
10impl WatchCreateRequest {
11    pub fn create(key_range: KeyRange) -> Self {
12        Self {
13            proto: etcdserverpb::WatchCreateRequest {
14                key: key_range.key,
15                range_end: key_range.range_end,
16                start_revision: 0,
17                progress_notify: false,
18                filters: vec![],
19                prev_kv: false,
20                fragment: false,
21                watch_id: 0,
22            },
23        }
24    }
25
26    pub fn start_revision(mut self, revision: i64) -> Self {
27        self.proto.start_revision = revision;
28        self
29    }
30
31    pub fn progress_notify(mut self) -> Self {
32        self.proto.progress_notify = true;
33        self
34    }
35
36    pub fn prev_kv(mut self) -> Self {
37        self.proto.prev_kv = true;
38        self
39    }
40}
41impl Into<etcdserverpb::WatchCreateRequest> for WatchCreateRequest {
42    fn into(self) -> etcdserverpb::WatchCreateRequest {
43        self.proto
44    }
45}
46
47impl Into<etcdserverpb::WatchRequest> for WatchCreateRequest {
48    fn into(self) -> etcdserverpb::WatchRequest {
49        etcdserverpb::WatchRequest {
50            request_union: Some(RequestUnion::CreateRequest(self.into())),
51        }
52    }
53}
54
55impl From<KeyRange> for WatchCreateRequest {
56    fn from(key_range: KeyRange) -> Self {
57        Self::create(key_range)
58    }
59}
60
61#[derive(Debug, Clone)]
62pub struct WatchCancelRequest {
63    proto: etcdserverpb::WatchCancelRequest,
64}
65
66impl WatchCancelRequest {
67    pub fn new(watch_id: i64) -> Self {
68        Self {
69            proto: etcdserverpb::WatchCancelRequest { watch_id },
70        }
71    }
72}
73
74impl From<i64> for WatchCancelRequest {
75    fn from(watch_id: i64) -> Self {
76        Self::new(watch_id)
77    }
78}
79
80impl Into<etcdserverpb::WatchCancelRequest> for WatchCancelRequest {
81    fn into(self) -> etcdserverpb::WatchCancelRequest {
82        self.proto
83    }
84}
85
86impl Into<etcdserverpb::WatchRequest> for WatchCancelRequest {
87    fn into(self) -> etcdserverpb::WatchRequest {
88        etcdserverpb::WatchRequest {
89            request_union: Some(RequestUnion::CancelRequest(self.into())),
90        }
91    }
92}
93
94#[derive(Debug, Clone)]
95pub struct WatchResponse {
96    pub header: ResponseHeader,
97    pub watch_id: i64,
98    pub created: bool,
99    pub canceled: bool,
100    pub events: Vec<Event>,
101}
102
103impl From<etcdserverpb::WatchResponse> for WatchResponse {
104    fn from(proto: etcdserverpb::WatchResponse) -> Self {
105        Self {
106            header: From::from(proto.header.expect("must fetch header")),
107            watch_id: proto.watch_id,
108            created: proto.created,
109            canceled: proto.canceled,
110            events: proto.events.into_iter().map(From::from).collect(),
111        }
112    }
113}