@@ -190,7 +190,6 @@ public String toString() {
190190
191191  public  static  final  Builder <Set <byte []>> BINARY_SET  = new  Builder <Set <byte []>>() {
192192    @ Override 
193-     @ SuppressWarnings ("unchecked" )
194193    public  Set <byte []> build (Object  data ) {
195194      if  (null  == data ) {
196195        return  null ;
@@ -477,6 +476,66 @@ public String toString() {
477476    }
478477  };
479478
479+   public  static  final  Builder <Map <String , Double >> STRING_DOUBLE_MAP  = new  Builder <Map <String , Double >>() {
480+     @ Override 
481+     @ SuppressWarnings ("unchecked" )
482+     public  Map <String , Double > build (Object  data ) {
483+       final  List <Object > list  = (List <Object >) data ;
484+       if  (list .isEmpty ()) return  Collections .emptyMap ();
485+ 
486+       if  (list .get (0 ) instanceof  KeyValue ) {
487+         final  Map <String , Double > map  = new  LinkedHashMap <>(list .size (), 1f );
488+         for  (Object  o  : list ) {
489+           KeyValue <?, ?> kv  = (KeyValue <?, ?>) o ;
490+           map .put (STRING .build (kv .getKey ()), DOUBLE .build (kv .getValue ()));
491+         }
492+         return  map ;
493+       } else  {
494+         final  Map <String , Double > map  = new  LinkedHashMap <>(list .size () / 2 , 1f );
495+         final  Iterator  iterator  = list .iterator ();
496+         while  (iterator .hasNext ()) {
497+           map .put (STRING .build (iterator .next ()), DOUBLE .build (iterator .next ()));
498+         }
499+         return  map ;
500+       }
501+     }
502+ 
503+     @ Override 
504+     public  String  toString () {
505+       return  "Map<String, Double>" ;
506+     }
507+   };
508+ 
509+ 
510+   public  static  final  Builder <Map <byte [], Double >> BINARY_DOUBLE_MAP  = new  Builder <Map <byte [], Double >>() {
511+     @ Override 
512+     @ SuppressWarnings ("unchecked" )
513+     public  Map <byte [], Double > build (Object  data ) {
514+       final  List <Object > list  = (List <Object >) data ;
515+       if  (list .isEmpty ()) return  Collections .emptyMap ();
516+ 
517+       if  (list .get (0 ) instanceof  KeyValue ) {
518+         final  Map <byte [], Double > map  = new  LinkedHashMap <>(list .size (), 1f );
519+         for  (Object  o  : list ) {
520+           KeyValue <?, ?> kv  = (KeyValue <?, ?>) o ;
521+           map .put (BINARY .build (kv .getKey ()), DOUBLE .build (kv .getValue ()));
522+         }
523+         return  map ;
524+       } else  {
525+         final  Map <byte [], Double > map  = new  LinkedHashMap <>(list .size () / 2 , 1f );
526+         final  Iterator  iterator  = list .iterator ();
527+         while  (iterator .hasNext ()) {
528+           map .put (BINARY .build (iterator .next ()), DOUBLE .build (iterator .next ()));
529+         }
530+         return  map ;
531+       }
532+     }
533+ 
534+     @ Override 
535+     public  String  toString () {
536+       return  "Map<String, Double>" ;
537+     }
538+   };
480539  public  static  final  Builder <KeyValue <String , String >> KEYED_ELEMENT  = new  Builder <KeyValue <String , String >>() {
481540    @ Override 
482541    @ SuppressWarnings ("unchecked" )
@@ -1817,6 +1876,43 @@ public String toString() {
18171876  @ Deprecated 
18181877  public  static  final  Builder <StreamFullInfo > STREAM_INFO_FULL  = STREAM_FULL_INFO ;
18191878
1879+   public  static  final  Builder <VectorInfo > VECTOR_INFO  = new  Builder <VectorInfo >() {
1880+ 
1881+     final  Map <String , Builder > mappingFunctions  = createDecoderMap ();
1882+ 
1883+     private  Map <String , Builder > createDecoderMap () {
1884+       Map <String , Builder > tempMappingFunctions  = new  HashMap <>();
1885+       tempMappingFunctions .put (VectorInfo .VECTOR_DIM , LONG );
1886+       tempMappingFunctions .put (VectorInfo .TYPE , STRING );
1887+       tempMappingFunctions .put (VectorInfo .SIZE , LONG );
1888+       tempMappingFunctions .put (VectorInfo .MAX_NODE_UID , LONG );
1889+       tempMappingFunctions .put (VectorInfo .VSET_UID , LONG );
1890+       tempMappingFunctions .put (VectorInfo .MAX_NODES , LONG );
1891+       tempMappingFunctions .put (VectorInfo .PROJECTION_INPUT_DIM , LONG );
1892+       tempMappingFunctions .put (VectorInfo .ATTRIBUTES_COUNT , LONG );
1893+       tempMappingFunctions .put (VectorInfo .MAX_LEVEL , LONG );
1894+       return  tempMappingFunctions ;
1895+     }
1896+ 
1897+     @ Override 
1898+     @ SuppressWarnings ("unchecked" )
1899+     public  VectorInfo  build (Object  data ) {
1900+       if  (null  == data ) {
1901+         return  null ;
1902+       }
1903+ 
1904+       List <Object > vectorEntries  = (List <Object >) data ;
1905+       Iterator <Object > iterator  = vectorEntries .iterator ();
1906+ 
1907+       return  new  VectorInfo (createMapFromDecodingFunctions (iterator , mappingFunctions ));
1908+     }
1909+ 
1910+     @ Override 
1911+     public  String  toString () {
1912+       return  "VectorInfo" ;
1913+     }
1914+   };
1915+ 
18201916  public  static  final  Builder <StreamPendingSummary > STREAM_PENDING_SUMMARY  = new  Builder <StreamPendingSummary >() {
18211917    @ Override 
18221918    @ SuppressWarnings ("unchecked" )
@@ -2152,6 +2248,92 @@ public String toString() {
21522248    }
21532249  };
21542250
2251+   // Vector Set builders 
2252+ 
2253+ 
2254+   public  static  final  Builder <RawVector > VEMB_RAW_RESULT  = new  Builder <RawVector >() {
2255+     @ Override 
2256+     @ SuppressWarnings ("unchecked" )
2257+     public  RawVector  build (Object  data ) {
2258+       if  (data  == null ) return  null ;
2259+       List <Object > list  = (List <Object >) data ;
2260+ 
2261+       String  quantizationType  = STRING .build (list .get (0 ));
2262+       byte [] rawData  = (byte []) list .get (1 );
2263+       Double  norm  = DOUBLE .build (list .get (2 ));
2264+       Double  quantizationRange  = list .size () > 3  ? DOUBLE .build (list .get (3 )) : null ;
2265+ 
2266+       return  new  RawVector (quantizationType , rawData , norm , quantizationRange );
2267+     }
2268+ 
2269+     @ Override 
2270+     public  String  toString () {
2271+       return  "RawVector" ;
2272+     }
2273+   };
2274+ 
2275+   // VLINKS builders 
2276+   public  static  final  Builder <List <Map <String , Double >>> VLINKS_WITH_SCORES_RESULT  = new  Builder <List <Map <String , Double >>>() {
2277+     @ Override 
2278+     @ SuppressWarnings ("unchecked" )
2279+     public  List <Map <String , Double >> build (Object  data ) {
2280+       if  (data  == null ) return  null ;
2281+       List <Object > list  = (List <Object >) data ;
2282+ 
2283+       List <Map <String , Double >> result  = new  ArrayList <>();
2284+       for  (Object  scoresRaw  : list ) {
2285+         if  (scoresRaw  == null ) continue ;
2286+         Map <String , Double > scores   = STRING_DOUBLE_MAP .build (scoresRaw );
2287+         result .add (scores );
2288+       }
2289+ 
2290+       return  result ;
2291+     }
2292+ 
2293+     @ Override 
2294+     public  String  toString () {
2295+       return  "List<Map<String, Double>>" ;
2296+     }
2297+   };
2298+ 
2299+   public  static  final  Builder <List <List <byte []>>> BINARY_LIST_LIST  = new  Builder <List <List <byte []>>>() {
2300+     @ Override 
2301+     @ SuppressWarnings ("unchecked" )
2302+     public  List <List <byte []>> build (Object  data ) {
2303+       if  (null  == data ) return  null ;
2304+       return  ((List <Object >) data ).stream ().map (BINARY_LIST ::build ).collect (Collectors .toList ());
2305+     }
2306+ 
2307+     @ Override 
2308+     public  String  toString () {
2309+       return  "List<List<String>>" ;
2310+     }
2311+   };
2312+ 
2313+ 
2314+   public  static  final  Builder <List <Map <byte [], Double >>> VLINKS_WITH_SCORES_RESULT_BINARY  = new  Builder <List <Map <byte [], Double >>>() {
2315+     @ Override 
2316+     @ SuppressWarnings ("unchecked" )
2317+     public  List <Map <byte [], Double >> build (Object  data ) {
2318+       if  (data  == null ) return  null ;
2319+       List <Object > list  = (List <Object >) data ;
2320+ 
2321+       List <Map <byte [], Double >> result  = new  ArrayList <>();
2322+       for  (Object  scoresRaw  : list ) {
2323+         if  (scoresRaw  == null ) continue ;
2324+         Map <byte [], Double > scores   = BINARY_DOUBLE_MAP .build (scoresRaw );
2325+         result .add (scores );
2326+       }
2327+ 
2328+       return  result ;
2329+     }
2330+ 
2331+     @ Override 
2332+     public  String  toString () {
2333+       return  "List<Map<byte[], Double>>" ;
2334+     }
2335+   };
2336+ 
21552337  /** 
21562338   * A decorator to implement Set from List. Assume that given List do not contains duplicated 
21572339   * values. The resulting set displays the same ordering, concurrency, and performance 
0 commit comments