55//! A special key is reserved for storing the length of the collection so far.
66//! Another special key is reserved for storing the offset of the collection.
77use std:: any:: type_name;
8- use std:: sync:: Mutex ;
9- use std:: { convert:: TryInto } ;
8+ use std:: convert:: TryInto ;
109use std:: marker:: PhantomData ;
10+ use std:: sync:: Mutex ;
1111
1212use serde:: { de:: DeserializeOwned , Serialize } ;
1313
1414use cosmwasm_std:: { ReadonlyStorage , StdError , StdResult , Storage } ;
1515
16- use secret_toolkit_serialization:: { Serde , Bincode2 } ;
16+ use secret_toolkit_serialization:: { Bincode2 , Serde } ;
1717
1818const LEN_KEY : & [ u8 ] = b"len" ;
1919const OFFSET_KEY : & [ u8 ] = b"off" ;
2020
2121pub struct DequeStore < ' a , T , Ser = Bincode2 >
22- where
23- T : Serialize + DeserializeOwned ,
24- Ser : Serde ,
22+ where
23+ T : Serialize + DeserializeOwned ,
24+ Ser : Serde ,
2525{
2626 /// prefix of the newly constructed Storage
2727 namespace : & ' a [ u8 ] ,
@@ -34,7 +34,7 @@ pub struct DequeStore<'a, T, Ser = Bincode2>
3434 serialization_type : PhantomData < Ser > ,
3535}
3636
37- impl < ' a , ' b , T : Serialize + DeserializeOwned , Ser : Serde > DequeStore < ' a , T , Ser > {
37+ impl < ' a , ' b , T : Serialize + DeserializeOwned , Ser : Serde > DequeStore < ' a , T , Ser > {
3838 /// constructor
3939 pub const fn new ( prefix : & ' a [ u8 ] ) -> Self {
4040 Self {
@@ -70,39 +70,38 @@ impl<'a, T: Serialize + DeserializeOwned, Ser: Serde> DequeStore<'a, T, Ser> {
7070 pub fn get_len < S : ReadonlyStorage > ( & self , storage : & S ) -> StdResult < u32 > {
7171 let mut may_len = self . length . lock ( ) . unwrap ( ) ;
7272 match * may_len {
73- Some ( len) => { Ok ( len) } ,
74- None => {
75- match self . _get_u32 ( storage, LEN_KEY ) {
76- Ok ( len) => {
77- * may_len = Some ( len) ;
78- Ok ( len)
79- } ,
80- Err ( e) => { Err ( e) } ,
73+ Some ( len) => Ok ( len) ,
74+ None => match self . _get_u32 ( storage, LEN_KEY ) {
75+ Ok ( len) => {
76+ * may_len = Some ( len) ;
77+ Ok ( len)
8178 }
79+ Err ( e) => Err ( e) ,
8280 } ,
8381 }
8482 }
8583 /// gets the offset from storage, and otherwise sets it to 0
8684 pub fn get_off < S : ReadonlyStorage > ( & self , storage : & S ) -> StdResult < u32 > {
8785 let mut may_off = self . offset . lock ( ) . unwrap ( ) ;
8886 match * may_off {
89- Some ( len) => { Ok ( len) } ,
90- None => {
91- match self . _get_u32 ( storage, OFFSET_KEY ) {
92- Ok ( len) => {
93- * may_off = Some ( len) ;
94- Ok ( len)
95- } ,
96- Err ( e) => { Err ( e) } ,
87+ Some ( len) => Ok ( len) ,
88+ None => match self . _get_u32 ( storage, OFFSET_KEY ) {
89+ Ok ( len) => {
90+ * may_off = Some ( len) ;
91+ Ok ( len)
9792 }
93+ Err ( e) => Err ( e) ,
9894 } ,
9995 }
10096 }
10197 /// gets offset or length
10298 fn _get_u32 < S : ReadonlyStorage > ( & self , storage : & S , key : & [ u8 ] ) -> StdResult < u32 > {
10399 let num_key = [ self . as_slice ( ) , key] . concat ( ) ;
104100 if let Some ( num_vec) = storage. get ( & num_key) {
105- let num_bytes = num_vec. as_slice ( ) . try_into ( ) . map_err ( |err| StdError :: parse_err ( "u32" , err) ) ?;
101+ let num_bytes = num_vec
102+ . as_slice ( )
103+ . try_into ( )
104+ . map_err ( |err| StdError :: parse_err ( "u32" , err) ) ?;
106105 let num = u32:: from_be_bytes ( num_bytes) ;
107106 Ok ( num)
108107 } else {
@@ -116,7 +115,9 @@ impl<'a, T: Serialize + DeserializeOwned, Ser: Serde> DequeStore<'a, T, Ser> {
116115 /// gets the element at pos if within bounds
117116 pub fn get_at < S : ReadonlyStorage > ( & self , storage : & S , pos : u32 ) -> StdResult < T > {
118117 let len = self . get_len ( storage) ?;
119- if pos >= len { return Err ( StdError :: generic_err ( "DequeStore access out of bounds" ) ) ; }
118+ if pos >= len {
119+ return Err ( StdError :: generic_err ( "DequeStore access out of bounds" ) ) ;
120+ }
120121 self . get_at_unchecked ( storage, pos)
121122 }
122123 /// tries to get the element at pos
@@ -153,12 +154,18 @@ impl<'a, T: Serialize + DeserializeOwned, Ser: Serde> DequeStore<'a, T, Ser> {
153154 /// Replaces data at a position within bounds
154155 pub fn set_at < S : Storage > ( & self , storage : & mut S , pos : u32 , item : & T ) -> StdResult < ( ) > {
155156 let len = self . get_len ( storage) ?;
156- if pos >= len { return Err ( StdError :: generic_err ( "DequeStore access out of bounds" ) ) ; }
157+ if pos >= len {
158+ return Err ( StdError :: generic_err ( "DequeStore access out of bounds" ) ) ;
159+ }
157160 self . set_at_unchecked ( storage, pos, item)
158161 }
159162 /// Sets data at a given index
160163 fn set_at_unchecked < S : Storage > ( & self , storage : & mut S , pos : u32 , item : & T ) -> StdResult < ( ) > {
161- self . save_impl ( storage, & self . _get_offset_pos ( storage, pos) ?. to_be_bytes ( ) , item)
164+ self . save_impl (
165+ storage,
166+ & self . _get_offset_pos ( storage, pos) ?. to_be_bytes ( ) ,
167+ item,
168+ )
162169 }
163170 /// Pushes an item to the back
164171 pub fn push_back < S : Storage > ( & self , storage : & mut S , item : & T ) -> StdResult < ( ) > {
@@ -178,7 +185,7 @@ impl<'a, T: Serialize + DeserializeOwned, Ser: Serde> DequeStore<'a, T, Ser> {
178185 }
179186 /// Pops an item from the back
180187 pub fn pop_back < S : Storage > ( & self , storage : & mut S ) -> StdResult < T > {
181- if let Some ( len) = self . get_len ( storage) ?. checked_sub ( 1 ) {
188+ if let Some ( len) = self . get_len ( storage) ?. checked_sub ( 1 ) {
182189 let item = self . get_at_unchecked ( storage, len) ;
183190 self . set_len ( storage, len) ;
184191 item
@@ -239,8 +246,16 @@ impl<'a, T: Serialize + DeserializeOwned, Ser: Serde> DequeStore<'a, T, Ser> {
239246 Ok ( iter)
240247 }
241248 /// does paging with the given parameters
242- pub fn paging < S : ReadonlyStorage > ( & self , storage : & S , start_page : u32 , size : u32 ) -> StdResult < Vec < T > > {
243- self . iter ( storage) ?. skip ( ( start_page as usize ) * ( size as usize ) ) . take ( size as usize ) . collect ( )
249+ pub fn paging < S : ReadonlyStorage > (
250+ & self ,
251+ storage : & S ,
252+ start_page : u32 ,
253+ size : u32 ,
254+ ) -> StdResult < Vec < T > > {
255+ self . iter ( storage) ?
256+ . skip ( ( start_page as usize ) * ( size as usize ) )
257+ . take ( size as usize )
258+ . collect ( )
244259 }
245260}
246261
@@ -291,7 +306,8 @@ impl<'a, T: Serialize + DeserializeOwned, Ser: Serde> Clone for DequeStore<'a, T
291306 length : Mutex :: new ( None ) ,
292307 offset : Mutex :: new ( None ) ,
293308 item_type : self . item_type . clone ( ) ,
294- serialization_type : self . serialization_type . clone ( ) }
309+ serialization_type : self . serialization_type . clone ( ) ,
310+ }
295311 }
296312}
297313
@@ -309,17 +325,17 @@ where
309325}
310326
311327impl < ' a , T , S , Ser > DequeStoreIter < ' a , T , S , Ser >
312- where
313- T : Serialize + DeserializeOwned ,
314- S : ReadonlyStorage ,
315- Ser : Serde ,
328+ where
329+ T : Serialize + DeserializeOwned ,
330+ S : ReadonlyStorage ,
331+ Ser : Serde ,
316332{
317333 /// constructor
318334 pub fn new (
319335 deque_store : & ' a DequeStore < ' a , T , Ser > ,
320336 storage : & ' a S ,
321337 start : u32 ,
322- end : u32
338+ end : u32 ,
323339 ) -> Self {
324340 Self {
325341 deque_store,
@@ -331,10 +347,10 @@ impl<'a, T, S, Ser> DequeStoreIter<'a, T, S, Ser>
331347}
332348
333349impl < ' a , T , S , Ser > Iterator for DequeStoreIter < ' a , T , S , Ser >
334- where
335- T : Serialize + DeserializeOwned ,
336- S : ReadonlyStorage ,
337- Ser : Serde ,
350+ where
351+ T : Serialize + DeserializeOwned ,
352+ S : ReadonlyStorage ,
353+ Ser : Serde ,
338354{
339355 type Item = StdResult < T > ;
340356
@@ -366,10 +382,10 @@ impl<'a, T, S, Ser> Iterator for DequeStoreIter<'a, T, S, Ser>
366382}
367383
368384impl < ' a , T , S , Ser > DoubleEndedIterator for DequeStoreIter < ' a , T , S , Ser >
369- where
370- T : Serialize + DeserializeOwned ,
371- S : ReadonlyStorage ,
372- Ser : Serde ,
385+ where
386+ T : Serialize + DeserializeOwned ,
387+ S : ReadonlyStorage ,
388+ Ser : Serde ,
373389{
374390 fn next_back ( & mut self ) -> Option < Self :: Item > {
375391 if self . start >= self . end {
@@ -593,7 +609,7 @@ mod tests {
593609 let mut storage = MockStorage :: new ( ) ;
594610 let json_deque_store: DequeStore < i32 , Json > = DequeStore :: new ( b"test2" ) ;
595611 json_deque_store. push_back ( & mut storage, & 1234 ) ?;
596-
612+
597613 let key = [ json_deque_store. as_slice ( ) , & 0_u32 . to_be_bytes ( ) ] . concat ( ) ;
598614 let bytes = storage. get ( & key) ;
599615 assert_eq ! ( bytes, Some ( b"1234" . to_vec( ) ) ) ;
@@ -626,4 +642,4 @@ mod tests {
626642
627643 Ok ( ( ) )
628644 }
629- }
645+ }
0 commit comments