11use std:: collections:: HashMap ;
22use std:: io;
33use std:: io:: { stdin, BufRead , Write } ;
4+ use bytes:: Bytes ;
45use tonic:: { transport:: Channel , Request } ;
56
67use dstore:: dstore_proto:: dstore_client:: DstoreClient ;
78use dstore:: dstore_proto:: { GetArg , SetArg } ;
89
910struct Store {
10- db : HashMap < String , String > ,
11+ db : HashMap < String , Bytes > ,
1112 global : DstoreClient < Channel > ,
1213}
1314
@@ -37,31 +38,31 @@ impl Store {
3738 let value = words[ 2 ..] . join ( " " ) ;
3839 let req = Request :: new ( SetArg {
3940 key : key. clone ( ) ,
40- value : value. clone ( ) ,
41+ value : value. as_bytes ( ) . to_vec ( ) ,
4142 } ) ;
4243 let res = self . global . set ( req) . await . unwrap ( ) ;
4344 if res. into_inner ( ) . success {
44- self . db . insert ( key, value) ;
45+ self . db . insert ( key, Bytes :: from ( value) ) ;
4546 eprintln ! ( "Database updated" ) ;
4647 } else {
4748 let req = Request :: new ( GetArg { key : key. clone ( ) } ) ;
4849 let res = self . global . get ( req) . await . unwrap ( ) . into_inner ( ) ;
49- self . db . insert ( key, res. value ) ;
50+ self . db . insert ( key, Bytes :: from ( res. value ) ) ;
5051 eprintln ! ( "(Updated local) Key occupied!" ) ;
5152 }
5253 }
5354 }
5455 "get" | "select" | "output" | "out" | "o" => {
5556 let key = words[ 1 ] . to_string ( ) ;
5657 match self . db . get ( & key) {
57- Some ( value) => println ! ( "db: {} -> {}" , key, value) ,
58+ Some ( value) => println ! ( "db: {} -> {}" , key, String :: from_utf8 ( value. to_vec ( ) ) . unwrap ( ) ) ,
5859 None => {
5960 let req = Request :: new ( GetArg { key : key. clone ( ) } ) ;
6061 let res = self . global . get ( req) . await . unwrap ( ) . into_inner ( ) ;
6162 if res. success {
62- println ! ( "global: {} -> {}\t (Updating Local)" , key, res. value) ;
63+ println ! ( "global: {} -> {}\t (Updating Local)" , key, String :: from_utf8 ( res. value. clone ( ) ) . unwrap ( ) ) ;
6364 // Update local
64- self . db . insert ( key, res. value ) ;
65+ self . db . insert ( key, Bytes :: from ( res. value ) ) ;
6566 } else {
6667 eprintln ! ( "Key-Value mapping doesn't exist" ) ;
6768 }
@@ -73,7 +74,7 @@ impl Store {
7374 let key = words[ 1 ] ;
7475 match self . db . get ( key) {
7576 Some ( value) => {
76- eprintln ! ( "({} -> {}) Removing local mapping!" , key, value) ;
77+ eprintln ! ( "({} -> {}) Removing local mapping!" , key, String :: from_utf8 ( value. to_vec ( ) ) . unwrap ( ) ) ;
7778 self . db . remove ( key) ;
7879 }
7980 None => eprintln ! ( "Key-Value mapping doesn't exist" ) ,
0 commit comments