11use std:: collections:: HashMap ;
22use std:: fmt:: Debug ;
33
4+ use valu3:: traits:: ToValueBehavior ;
45use valu3:: value:: Value ;
56
67use crate :: error:: Error ;
@@ -12,27 +13,21 @@ use std::sync::mpsc::Sender;
1213pub type Key = String ;
1314
1415#[ derive( Clone , Debug ) ]
15- pub struct Cache < V >
16- where
17- V : PartialEq ,
18- {
19- map : HashMap < Key , V > ,
16+ pub struct Cache {
17+ map : HashMap < Key , Value > ,
2018 list : Vec < Key > ,
2119 capacity : usize ,
22- sender : Option < Sender < Event < V > > > ,
23- _phantom : std:: marker:: PhantomData < V > ,
20+ sender : Option < Sender < Event < Value > > > ,
21+ _phantom : std:: marker:: PhantomData < Value > ,
2422}
2523
26- impl PartialEq for Cache < Value > {
24+ impl PartialEq for Cache {
2725 fn eq ( & self , other : & Self ) -> bool {
2826 self . map == other. map && self . list == other. list && self . capacity == other. capacity
2927 }
3028}
3129
32- impl < V > Cache < V >
33- where
34- V : PartialEq + Clone ,
35- {
30+ impl Cache {
3631 pub fn new ( capacity : usize ) -> Self {
3732 Self {
3833 map : HashMap :: new ( ) ,
4338 }
4439 }
4540
46- pub fn with_sender ( capacity : usize , sender : Sender < Event < V > > ) -> Self {
41+ pub fn with_sender ( capacity : usize , sender : Sender < Event < Value > > ) -> Self {
4742 Self {
4843 map : HashMap :: new ( ) ,
4944 list : Vec :: new ( ) ,
@@ -53,22 +48,22 @@ where
5348 }
5449 }
5550
56- pub fn set_event ( & mut self , sender : Sender < Event < V > > ) {
51+ pub fn set_event ( & mut self , sender : Sender < Event < Value > > ) {
5752 self . sender = Some ( sender) ;
5853 }
5954
6055 pub fn remove_event ( & mut self ) {
6156 self . sender = None ;
6257 }
6358
64- fn send_insert ( & self , key : Key , value : V ) {
59+ fn send_insert ( & self , key : Key , value : Value ) {
6560 if let Some ( sender) = & self . sender {
6661 let event = Event :: insert ( key, value) ;
6762 sender. send ( event) . unwrap ( ) ;
6863 }
6964 }
7065
71- fn send_remove ( & self , key : Key , value : V ) {
66+ fn send_remove ( & self , key : Key , value : Value ) {
7267 if let Some ( sender) = & self . sender {
7368 let event = Event :: remove ( key, value) ;
7469 sender. send ( event) . unwrap ( ) ;
8277 }
8378 }
8479
85- pub fn insert < T > ( & mut self , key : T , value : V )
80+ pub fn insert < T , V > ( & mut self , key : T , value : V )
8681 where
8782 T : Into < String > + Clone + AsRef < str > ,
83+ V : ToValueBehavior ,
8884 {
8985 let key = key. into ( ) ;
9086
@@ -108,26 +104,16 @@ where
108104 . unwrap_or ( self . list . len ( ) ) ;
109105
110106 self . list . insert ( position, key. clone ( ) ) ;
111- self . map . insert ( key. clone ( ) , value. clone ( ) . into ( ) ) ;
107+ self . map . insert ( key. clone ( ) , value. to_value ( ) ) ;
112108
113- self . send_insert ( key, value) ;
109+ self . send_insert ( key, value. to_value ( ) ) ;
114110 }
115111
116- pub fn insert_if_not_exists ( & mut self , key : Key , value : V ) -> Result < ( ) , Error > {
117- if self . map . contains_key ( & key) {
118- return Err ( Error :: SortKeyExists ) ;
119- }
120-
121- self . insert ( key, value) ;
122-
123- Ok ( ( ) )
124- }
125-
126- pub fn get ( & self , key : & str ) -> Option < & V > {
112+ pub fn get ( & self , key : & str ) -> Option < & Value > {
127113 self . map . get ( key)
128114 }
129115
130- pub fn get_mut ( & mut self , key : & str ) -> Option < & mut V > {
116+ pub fn get_mut ( & mut self , key : & str ) -> Option < & mut Value > {
131117 self . map . get_mut ( key)
132118 }
133119
@@ -175,7 +161,7 @@ where
175161 self . map . contains_key ( key)
176162 }
177163
178- pub fn list < T > ( & self , props : T ) -> Result < Vec < ( Key , & V ) > , Error >
164+ pub fn list < T > ( & self , props : T ) -> Result < Vec < ( Key , & Value ) > , Error >
179165 where
180166 T : Into < ListProps > ,
181167 {
@@ -191,7 +177,7 @@ where
191177 & self ,
192178 mut list_iter : I ,
193179 props : ListProps ,
194- ) -> Result < Vec < ( Key , & V ) > , Error >
180+ ) -> Result < Vec < ( Key , & Value ) > , Error >
195181 where
196182 I : Iterator < Item = & ' a Key > ,
197183 {
0 commit comments