1515 * limitations under the License.
1616 */
1717use cheetah_string:: CheetahString ;
18+ use rocketmq_macros:: RequestHeaderCodec ;
1819use serde:: Deserialize ;
1920use serde:: Serialize ;
2021
21- use crate :: protocol:: command_custom_header:: CommandCustomHeader ;
22- use crate :: protocol:: command_custom_header:: FromMap ;
2322use crate :: rpc:: rpc_request_header:: RpcRequestHeader ;
2423
25- #[ derive( Serialize , Deserialize , Debug , Default ) ]
24+ #[ derive( Serialize , Deserialize , Debug , Default , RequestHeaderCodec ) ]
2625#[ serde( rename_all = "camelCase" ) ]
2726pub struct CheckTransactionStateRequestHeader {
2827 pub topic : Option < CheetahString > ,
28+ #[ required]
2929 pub tran_state_table_offset : i64 ,
30+ #[ required]
3031 pub commit_log_offset : i64 ,
3132 pub msg_id : Option < CheetahString > ,
3233 pub transaction_id : Option < CheetahString > ,
@@ -35,7 +36,7 @@ pub struct CheckTransactionStateRequestHeader {
3536 pub rpc_request_header : Option < RpcRequestHeader > ,
3637}
3738
38- impl CheckTransactionStateRequestHeader {
39+ /* impl CheckTransactionStateRequestHeader {
3940 pub const TOPIC: &'static str = "topic";
4041 pub const TRAN_STATE_TABLE_OFFSET: &'static str = "tranStateTableOffset";
4142 pub const COMMIT_LOG_OFFSET: &'static str = "commitLogOffset";
@@ -118,3 +119,131 @@ impl FromMap for CheckTransactionStateRequestHeader {
118119 })
119120 }
120121}
122+ */
123+
124+ #[ cfg( test) ]
125+ mod tests {
126+ use std:: collections:: HashMap ;
127+
128+ use cheetah_string:: CheetahString ;
129+
130+ use super :: * ;
131+ use crate :: protocol:: command_custom_header:: CommandCustomHeader ;
132+ use crate :: protocol:: command_custom_header:: FromMap ;
133+
134+ #[ test]
135+ fn check_transaction_state_request_header_serializes_correctly ( ) {
136+ let header = CheckTransactionStateRequestHeader {
137+ topic : Some ( CheetahString :: from_static_str ( "test_topic" ) ) ,
138+ tran_state_table_offset : 123 ,
139+ commit_log_offset : 456 ,
140+ msg_id : Some ( CheetahString :: from_static_str ( "test_msg_id" ) ) ,
141+ transaction_id : Some ( CheetahString :: from_static_str ( "test_transaction_id" ) ) ,
142+ offset_msg_id : Some ( CheetahString :: from_static_str ( "test_offset_msg_id" ) ) ,
143+ rpc_request_header : None ,
144+ } ;
145+ let map = header. to_map ( ) . unwrap ( ) ;
146+ assert_eq ! (
147+ map. get( & CheetahString :: from_static_str( "topic" ) ) . unwrap( ) ,
148+ "test_topic"
149+ ) ;
150+ assert_eq ! (
151+ map. get( & CheetahString :: from_static_str( "tranStateTableOffset" ) )
152+ . unwrap( ) ,
153+ "123"
154+ ) ;
155+ assert_eq ! (
156+ map. get( & CheetahString :: from_static_str( "commitLogOffset" ) )
157+ . unwrap( ) ,
158+ "456"
159+ ) ;
160+ assert_eq ! (
161+ map. get( & CheetahString :: from_static_str( "msgId" ) ) . unwrap( ) ,
162+ "test_msg_id"
163+ ) ;
164+ assert_eq ! (
165+ map. get( & CheetahString :: from_static_str( "transactionId" ) )
166+ . unwrap( ) ,
167+ "test_transaction_id"
168+ ) ;
169+ assert_eq ! (
170+ map. get( & CheetahString :: from_static_str( "offsetMsgId" ) )
171+ . unwrap( ) ,
172+ "test_offset_msg_id"
173+ ) ;
174+ }
175+
176+ #[ test]
177+ fn check_transaction_state_request_header_deserializes_correctly ( ) {
178+ let mut map = HashMap :: new ( ) ;
179+ map. insert (
180+ CheetahString :: from_static_str ( "topic" ) ,
181+ CheetahString :: from_static_str ( "test_topic" ) ,
182+ ) ;
183+ map. insert (
184+ CheetahString :: from_static_str ( "tranStateTableOffset" ) ,
185+ CheetahString :: from_static_str ( "123" ) ,
186+ ) ;
187+ map. insert (
188+ CheetahString :: from_static_str ( "commitLogOffset" ) ,
189+ CheetahString :: from_static_str ( "456" ) ,
190+ ) ;
191+ map. insert (
192+ CheetahString :: from_static_str ( "msgId" ) ,
193+ CheetahString :: from_static_str ( "test_msg_id" ) ,
194+ ) ;
195+ map. insert (
196+ CheetahString :: from_static_str ( "transactionId" ) ,
197+ CheetahString :: from_static_str ( "test_transaction_id" ) ,
198+ ) ;
199+ map. insert (
200+ CheetahString :: from_static_str ( "offsetMsgId" ) ,
201+ CheetahString :: from_static_str ( "test_offset_msg_id" ) ,
202+ ) ;
203+
204+ let header = <CheckTransactionStateRequestHeader as FromMap >:: from ( & map) . unwrap ( ) ;
205+ assert_eq ! ( header. topic. unwrap( ) , "test_topic" ) ;
206+ assert_eq ! ( header. tran_state_table_offset, 123 ) ;
207+ assert_eq ! ( header. commit_log_offset, 456 ) ;
208+ assert_eq ! ( header. msg_id. unwrap( ) , "test_msg_id" ) ;
209+ assert_eq ! ( header. transaction_id. unwrap( ) , "test_transaction_id" ) ;
210+ assert_eq ! ( header. offset_msg_id. unwrap( ) , "test_offset_msg_id" ) ;
211+ }
212+
213+ #[ test]
214+ fn check_transaction_state_request_header_handles_missing_optional_fields ( ) {
215+ let mut map = HashMap :: new ( ) ;
216+ map. insert (
217+ CheetahString :: from_static_str ( "tranStateTableOffset" ) ,
218+ CheetahString :: from_static_str ( "123" ) ,
219+ ) ;
220+ map. insert (
221+ CheetahString :: from_static_str ( "commitLogOffset" ) ,
222+ CheetahString :: from_static_str ( "456" ) ,
223+ ) ;
224+
225+ let header = <CheckTransactionStateRequestHeader as FromMap >:: from ( & map) . unwrap ( ) ;
226+ assert ! ( header. topic. is_none( ) ) ;
227+ assert_eq ! ( header. tran_state_table_offset, 123 ) ;
228+ assert_eq ! ( header. commit_log_offset, 456 ) ;
229+ assert ! ( header. msg_id. is_none( ) ) ;
230+ assert ! ( header. transaction_id. is_none( ) ) ;
231+ assert ! ( header. offset_msg_id. is_none( ) ) ;
232+ }
233+
234+ #[ test]
235+ fn check_transaction_state_request_header_handles_invalid_data ( ) {
236+ let mut map = HashMap :: new ( ) ;
237+ map. insert (
238+ CheetahString :: from_static_str ( "tranStateTableOffset" ) ,
239+ CheetahString :: from_static_str ( "invalid" ) ,
240+ ) ;
241+ map. insert (
242+ CheetahString :: from_static_str ( "commitLogOffset" ) ,
243+ CheetahString :: from_static_str ( "invalid" ) ,
244+ ) ;
245+
246+ let result = <CheckTransactionStateRequestHeader as FromMap >:: from ( & map) ;
247+ assert ! ( result. is_err( ) ) ;
248+ }
249+ }
0 commit comments