11use crate :: connection:: Connection ;
22use crate :: messages:: { CreatePlan , DeletePlan , Plan , Plans , StartPlan , StopPlan } ;
3- use flatbuffers:: FlatBufferBuilder ;
3+ use flatbuffers:: { FlatBufferBuilder , WIPOffset } ;
44use std:: ops:: { Deref , DerefMut } ;
5- use track_rails:: message_generated:: protocol;
65use track_rails:: message_generated:: protocol:: { ByName , ByNameArgs , CreatePlanRequest , CreatePlanRequestArgs , DeletePlanRequest , DeletePlanRequestArgs , Filter , FilterArgs , FilterType , GetPlansRequest , GetPlansRequestArgs , Message , MessageArgs , OkStatus , OkStatusArgs , Payload , StartPlanRequest , StartPlanRequestArgs , Status , StopPlanRequest , StopPlanRequestArgs } ;
76
87pub struct Admin {
@@ -15,79 +14,74 @@ impl Admin {
1514 Admin { connection }
1615 }
1716
17+ /// Start an already created plan.
1818 pub fn start_plan ( & mut self , id : usize ) -> Result < ( ) , String > {
1919 let mut builder = FlatBufferBuilder :: new ( ) ;
2020
2121 let start = StartPlanRequest :: create ( & mut builder, & StartPlanRequestArgs { id : id as u64 } ) ;
2222
23- let status = OkStatus :: create ( & mut builder, & OkStatusArgs { } ) ;
24-
25- let msg = Message :: create ( & mut builder, & MessageArgs {
26- data_type : Payload :: StartPlanRequest ,
27- data : Some ( start. as_union_value ( ) ) ,
28- status_type : Status :: OkStatus ,
29- status : Some ( status. as_union_value ( ) ) ,
30- } ) ;
31-
32- builder. finish ( msg, None ) ;
33- let msg = builder. finished_data ( ) . to_vec ( ) ;
23+ let msg = Self :: wrap_msg ( & mut builder, Payload :: StopPlanRequest , start. as_union_value ( ) ) ;
3424
3525 self . write_all ( & msg) ?;
3626
37- let _: StartPlan = self . read_msg ( ) ?;
27+ let _: StartPlan = self . receive ( ) ?;
3828 Ok ( ( ) )
3929 }
4030
41- pub ( crate ) fn stop_plan ( & mut self , id : usize ) -> Result < ( ) , String > {
31+ /// Try to stop a created plan.
32+ pub fn stop_plan ( & mut self , id : usize ) -> Result < ( ) , String > {
4233 let mut builder = FlatBufferBuilder :: new ( ) ;
4334
4435 let stop = StopPlanRequest :: create ( & mut builder, & StopPlanRequestArgs { id : id as u64 } ) ;
4536
46- let status = OkStatus :: create ( & mut builder, & OkStatusArgs { } ) ;
37+ let msg = Self :: wrap_msg ( & mut builder, Payload :: StopPlanRequest , stop. as_union_value ( ) ) ;
38+
39+ self . write_all ( & msg) ?;
4740
48- let msg = Message :: create ( & mut builder, & MessageArgs {
49- data_type : Payload :: StopPlanRequest ,
50- data : Some ( stop. as_union_value ( ) ) ,
41+ let _: StopPlan = self . receive ( ) ?;
42+ Ok ( ( ) )
43+ }
44+
45+ fn wrap_msg ( builder : & mut FlatBufferBuilder , payload : Payload , data : WIPOffset < flatbuffers:: UnionWIPOffset > ) -> Vec < u8 > {
46+ let status = OkStatus :: create ( builder, & OkStatusArgs { } ) ;
47+
48+ let msg = Message :: create ( builder, & MessageArgs {
49+ data_type : payload,
50+ data : Some ( data) ,
5151 status_type : Status :: OkStatus ,
5252 status : Some ( status. as_union_value ( ) ) ,
5353 } ) ;
54-
5554 builder. finish ( msg, None ) ;
56- let msg = builder. finished_data ( ) . to_vec ( ) ;
57-
58- self . write_all ( & msg) ?;
59-
60- let _: StopPlan = self . read_msg ( ) ?;
61- Ok ( ( ) )
55+ builder. finished_data ( ) . to_vec ( )
6256 }
6357
58+
59+ /// Create a new plan with a given name and according to the provided schema.
60+ ///
61+ /// # Arguments
62+ ///
63+ /// * `name`: the name of the plan
64+ /// * `plan`: the schema of the plan
65+ ///
66+ /// returns: Result<usize, String>
6467 pub fn create_plan < Name : AsRef < str > , Plan : AsRef < str > > ( & mut self , name : Name , plan : Plan ) -> Result < usize , String > {
6568 let mut builder = FlatBufferBuilder :: new ( ) ;
6669
6770 let name = builder. create_string ( name. as_ref ( ) ) ;
6871 let plan = builder. create_string ( plan. as_ref ( ) ) ;
6972
70- let create = CreatePlanRequest :: create ( & mut builder, & CreatePlanRequestArgs { name : Some ( name) , plan : Some ( plan) } ) . as_union_value ( ) ;
71-
72- let status = OkStatus :: create ( & mut builder, & OkStatusArgs { } ) . as_union_value ( ) ;
73-
74- let msg = protocol:: Message :: create ( & mut builder, & MessageArgs {
75- data_type : Payload :: CreatePlanRequest ,
76- data : Some ( create) ,
77- status_type : Status :: OkStatus ,
78- status : Some ( status) ,
79- } ) ;
73+ let create = CreatePlanRequest :: create ( & mut builder, & CreatePlanRequestArgs { name : Some ( name) , plan : Some ( plan) } ) ;
8074
81- builder. finish ( msg, None ) ;
82- let msg = builder. finished_data ( ) ;
75+ let msg = Self :: wrap_msg ( & mut builder, Payload :: CreatePlanRequest , create. as_union_value ( ) ) ;
8376
84- self . write_all ( msg) ?;
77+ self . write_all ( & msg) ?;
8578
86- let res: CreatePlan = self . read_msg ( ) ?;
79+ let res: CreatePlan = self . receive ( ) ?;
8780
8881 Ok ( res. id )
8982 }
9083
84+ /// Get all registered plans, running as well as stopped.
9185 pub fn get_plans ( & mut self ) -> Result < Vec < Plan > , String > {
9286 self . get_plans_by_name ( "*" )
9387 }
@@ -104,44 +98,30 @@ impl Admin {
10498 // send request
10599 let get_plan = GetPlansRequest :: create ( & mut builder, & GetPlansRequestArgs { name : Some ( filter) } ) . as_union_value ( ) ;
106100
107- let status = OkStatus :: create ( & mut builder, & OkStatusArgs { } ) . as_union_value ( ) ;
108-
109- let msg = Message :: create ( & mut builder, & MessageArgs {
110- data_type : Payload :: GetPlansRequest ,
111- data : Some ( get_plan) ,
112- status_type : Status :: OkStatus ,
113- status : Some ( status) ,
114- } ) ;
101+ let msg = Self :: wrap_msg ( & mut builder, Payload :: GetPlansRequest , get_plan) ;
115102
116- builder. finish ( msg, None ) ;
117- let msg = builder. finished_data ( ) . to_vec ( ) ;
118103 self . write_all ( & msg) ?;
119104
120105 // wait response
121- let res: Plans = self . read_msg ( ) ?;
106+ let res: Plans = self . receive ( ) ?;
122107
123108 Ok ( res. 0 )
124109
125110 }
126111
112+ /// Delete a specified plan.
127113 pub fn delete_plan ( & mut self , id : usize ) -> Result < ( ) , String > {
128114 let mut builder = FlatBufferBuilder :: new ( ) ;
129115
130116 // send request
131- let delete = DeletePlanRequest :: create ( & mut builder, & DeletePlanRequestArgs { id : id as u64 , } ) . as_union_value ( ) ;
132- let status = OkStatus :: create ( & mut builder, & OkStatusArgs { } ) . as_union_value ( ) ;
133- let msg = Message :: create ( & mut builder, & MessageArgs {
134- data_type : Payload :: DeletePlanRequest ,
135- data : Some ( delete) ,
136- status_type : Status :: OkStatus ,
137- status : Some ( status) ,
138- } ) ;
139- builder. finish ( msg, None ) ;
140- let msg = builder. finished_data ( ) . to_vec ( ) ;
117+ let delete = DeletePlanRequest :: create ( & mut builder, & DeletePlanRequestArgs { id : id as u64 , } ) ;
118+
119+ let msg = Self :: wrap_msg ( & mut builder, Payload :: DeletePlanRequest , delete. as_union_value ( ) ) ;
120+
141121 self . write_all ( & msg) ?;
142122
143123 // wait for response
144- let _: DeletePlan = self . read_msg ( ) ?;
124+ let _: DeletePlan = self . receive ( ) ?;
145125
146126 Ok ( ( ) )
147127 }
0 commit comments