@@ -4,8 +4,8 @@ mod resp3 {
44 error:: { RedisProtocolError , RedisProtocolErrorKind } ,
55 resp3:: {
66 decode:: streaming:: decode_bytes_mut as resp3_decode,
7- encode:: complete:: extend_encode as resp3_encode,
8- types:: { BytesFrame as Resp3Frame , StreamedFrame } ,
7+ encode:: complete:: { extend_encode as resp3_encode, extend_encode_borrowed as resp3_encode_borrowed } ,
8+ types:: { BorrowedFrame , BytesFrame as Resp3Frame , StreamedFrame } ,
99 } ,
1010 } ;
1111 use bytes:: BytesMut ;
@@ -40,10 +40,10 @@ mod resp3 {
4040 /// let socket = TcpStream::connect("127.0.0.1:6379").await.unwrap();
4141 /// let mut framed = Framed::new(socket, Resp3::default());
4242 ///
43- /// let hello = Resp3Frame ::Hello {
44- /// version: RespVersion::RESP3,
45- /// username: Some("foo".into()),
46- /// password: Some("bar".into()) ,
43+ /// let hello = BytesFrame ::Hello {
44+ /// version: RespVersion::RESP3,
45+ /// auth: Some(( "foo".into(), "bar".into() )),
46+ /// setname: None ,
4747 /// };
4848 /// // or use the shorthand, but this likely only works for simple use cases
4949 /// let get_foo = resp3_encode_command("GET foo");
@@ -60,14 +60,38 @@ mod resp3 {
6060 /// ```
6161 #[ derive( Debug , Default ) ]
6262 pub struct Resp3 {
63- streaming : Option < StreamedFrame < Resp3Frame > > ,
63+ streaming : Option < StreamedFrame < Resp3Frame > > ,
64+ int_as_blobstring : bool ,
65+ }
66+
67+ impl Resp3 {
68+ /// Create a new codec with the provided flag describing whether the encoder logic should send integers as blob
69+ /// strings.
70+ pub fn new ( int_as_blobstring : bool ) -> Resp3 {
71+ Resp3 {
72+ int_as_blobstring,
73+ streaming : None ,
74+ }
75+ }
6476 }
6577
6678 impl Encoder < Resp3Frame > for Resp3 {
6779 type Error = RedisProtocolError ;
6880
6981 fn encode ( & mut self , item : Resp3Frame , dst : & mut BytesMut ) -> Result < ( ) , Self :: Error > {
70- resp3_encode ( dst, & item) . map ( |_| ( ) ) . map_err ( RedisProtocolError :: from)
82+ resp3_encode ( dst, & item, self . int_as_blobstring )
83+ . map ( |_| ( ) )
84+ . map_err ( RedisProtocolError :: from)
85+ }
86+ }
87+
88+ impl Encoder < BorrowedFrame < ' _ > > for Resp3 {
89+ type Error = RedisProtocolError ;
90+
91+ fn encode ( & mut self , item : BorrowedFrame , dst : & mut BytesMut ) -> Result < ( ) , Self :: Error > {
92+ resp3_encode_borrowed ( dst, & item, self . int_as_blobstring )
93+ . map ( |_| ( ) )
94+ . map_err ( RedisProtocolError :: from)
7195 }
7296 }
7397
@@ -125,8 +149,8 @@ mod resp2 {
125149 error:: RedisProtocolError ,
126150 resp2:: {
127151 decode:: decode_bytes_mut as resp2_decode,
128- encode:: extend_encode as resp2_encode,
129- types:: BytesFrame as Resp2Frame ,
152+ encode:: { extend_encode as resp2_encode, extend_encode_borrowed as resp2_encode_borrowed } ,
153+ types:: { BorrowedFrame , BytesFrame as Resp2Frame } ,
130154 } ,
131155 } ;
132156 use bytes:: BytesMut ;
@@ -169,13 +193,35 @@ mod resp2 {
169193 /// }
170194 /// ```
171195 #[ derive( Clone , Debug , Default ) ]
172- pub struct Resp2 ;
196+ pub struct Resp2 {
197+ int_as_bulkstring : bool ,
198+ }
199+
200+ impl Resp2 {
201+ /// Create a new codec with the provided flag describing whether the encoder logic should send integers as blob
202+ /// strings.
203+ pub fn new ( int_as_bulkstring : bool ) -> Resp2 {
204+ Resp2 { int_as_bulkstring }
205+ }
206+ }
173207
174208 impl Encoder < Resp2Frame > for Resp2 {
175209 type Error = RedisProtocolError ;
176210
177211 fn encode ( & mut self , item : Resp2Frame , dst : & mut BytesMut ) -> Result < ( ) , Self :: Error > {
178- resp2_encode ( dst, & item) . map ( |_| ( ) ) . map_err ( RedisProtocolError :: from)
212+ resp2_encode ( dst, & item, self . int_as_bulkstring )
213+ . map ( |_| ( ) )
214+ . map_err ( RedisProtocolError :: from)
215+ }
216+ }
217+
218+ impl Encoder < BorrowedFrame < ' _ > > for Resp2 {
219+ type Error = RedisProtocolError ;
220+
221+ fn encode ( & mut self , item : BorrowedFrame , dst : & mut BytesMut ) -> Result < ( ) , Self :: Error > {
222+ resp2_encode_borrowed ( dst, & item, self . int_as_bulkstring )
223+ . map ( |_| ( ) )
224+ . map_err ( RedisProtocolError :: from)
179225 }
180226 }
181227
0 commit comments