@@ -4,7 +4,7 @@ use tokio::sync::RwLock;
44
55use crate :: {
66 exceptions:: rust_err:: NatsrpyResult ,
7- utils:: { headers:: NatsrpyHeadermapExt , natsrpy_future} ,
7+ utils:: { headers:: NatsrpyHeadermapExt , natsrpy_future, py_types :: TimeValue } ,
88} ;
99
1010#[ pyo3:: pyclass]
@@ -25,6 +25,25 @@ impl From<async_nats::jetstream::Message> for JetStreamMessage {
2525 }
2626}
2727
28+ impl JetStreamMessage {
29+ pub fn inner_ack < ' py > (
30+ & self ,
31+ py : Python < ' py > ,
32+ kind : async_nats:: jetstream:: message:: AckKind ,
33+ double : bool ,
34+ ) -> NatsrpyResult < Bound < ' py , PyAny > > {
35+ let acker_guard = self . acker . clone ( ) ;
36+ natsrpy_future ( py, async move {
37+ if double {
38+ acker_guard. read ( ) . await . double_ack_with ( kind) . await ?;
39+ } else {
40+ acker_guard. read ( ) . await . ack_with ( kind) . await ?;
41+ }
42+ Ok ( ( ) )
43+ } )
44+ }
45+ }
46+
2847#[ pyo3:: pymethods]
2948impl JetStreamMessage {
3049 #[ getter]
@@ -51,11 +70,41 @@ impl JetStreamMessage {
5170 }
5271 }
5372
54- pub fn ack < ' py > ( & self , py : Python < ' py > ) -> NatsrpyResult < Bound < ' py , PyAny > > {
55- let acker_guard = self . acker . clone ( ) ;
56- natsrpy_future ( py, async move {
57- acker_guard. read ( ) . await . ack ( ) . await ?;
58- Ok ( ( ) )
59- } )
73+ #[ pyo3( signature=( double=false ) ) ]
74+ pub fn ack < ' py > ( & self , py : Python < ' py > , double : bool ) -> NatsrpyResult < Bound < ' py , PyAny > > {
75+ self . inner_ack ( py, async_nats:: jetstream:: message:: AckKind :: Ack , double)
76+ }
77+
78+ #[ pyo3( signature=( delay=None , double=false ) ) ]
79+ pub fn nack < ' py > (
80+ & self ,
81+ py : Python < ' py > ,
82+ delay : Option < TimeValue > ,
83+ double : bool ,
84+ ) -> NatsrpyResult < Bound < ' py , PyAny > > {
85+ self . inner_ack (
86+ py,
87+ async_nats:: jetstream:: message:: AckKind :: Nak ( delay. map ( Into :: into) ) ,
88+ double,
89+ )
90+ }
91+
92+ #[ pyo3( signature=( double=false ) ) ]
93+ pub fn progress < ' py > ( & self , py : Python < ' py > , double : bool ) -> NatsrpyResult < Bound < ' py , PyAny > > {
94+ self . inner_ack (
95+ py,
96+ async_nats:: jetstream:: message:: AckKind :: Progress ,
97+ double,
98+ )
99+ }
100+
101+ #[ pyo3( signature=( double=false ) ) ]
102+ pub fn next < ' py > ( & self , py : Python < ' py > , double : bool ) -> NatsrpyResult < Bound < ' py , PyAny > > {
103+ self . inner_ack ( py, async_nats:: jetstream:: message:: AckKind :: Next , double)
104+ }
105+
106+ #[ pyo3( signature=( double=false ) ) ]
107+ pub fn term < ' py > ( & self , py : Python < ' py > , double : bool ) -> NatsrpyResult < Bound < ' py , PyAny > > {
108+ self . inner_ack ( py, async_nats:: jetstream:: message:: AckKind :: Term , double)
60109 }
61110}
0 commit comments