瀏覽代碼

token_list: create drk_tokenlist hashmap from two iterators

lunar-mining 4 年之前
父節點
當前提交
b38aca87b0
共有 1 個文件被更改,包括 23 次插入8 次删除
  1. 23 8
      src/util/token_list.rs

+ 23 - 8
src/util/token_list.rs

@@ -4,6 +4,7 @@ use crate::{
 };
 };
 use serde_json::Value;
 use serde_json::Value;
 use std::collections::HashMap;
 use std::collections::HashMap;
+use std::iter::FromIterator;
 
 
 #[derive(Debug, Clone)]
 #[derive(Debug, Clone)]
 pub struct SolTokenList {
 pub struct SolTokenList {
@@ -91,15 +92,22 @@ pub struct DrkTokenList {
 
 
 impl DrkTokenList {
 impl DrkTokenList {
     pub fn new(list: SolTokenList) -> Result<Self> {
     pub fn new(list: SolTokenList) -> Result<Self> {
-        let mut drk_tokenlist = HashMap::new();
+        // get symbols
         let symbols = list.clone().get_symbols()?;
         let symbols = list.clone().get_symbols()?;
 
 
-        for symbol in symbols {
-            let id = list.clone().search_id(&symbol)?;
-            let drk_id = generate_id(&id, &NetworkName::Solana)?;
-            drk_tokenlist.insert(symbol, drk_id);
-        }
-        //TODO: add btc_id, NetworkName::Bitcoin to drk_tokenlist
+        // get ids
+        let ids: Vec<jubjub::Fr> = symbols
+            .iter()
+            .map(|sym| generate_id(sym, &NetworkName::Solana).unwrap())
+            .collect();
+
+        // create the hashmap
+        let drk_tokenlist: HashMap<String, jubjub::Fr> = symbols
+            .iter()
+            .zip(ids.iter())
+            .map(|(key, value)| return (key.clone(), value.clone()))
+            .collect();
+
         Ok(Self { drk_tokenlist })
         Ok(Self { drk_tokenlist })
     }
     }
 }
 }
@@ -107,7 +115,7 @@ impl DrkTokenList {
 mod tests {
 mod tests {
 
 
     use super::*;
     use super::*;
-    use crate::util::SolTokenList;
+    use crate::util::{DrkTokenList, SolTokenList};
     use crate::Result;
     use crate::Result;
 
 
     #[test]
     #[test]
@@ -128,4 +136,11 @@ mod tests {
         }
         }
         Ok(())
         Ok(())
     }
     }
+    #[test]
+    pub fn test_hashmap() -> Result<()> {
+        let token = SolTokenList::new()?;
+        let drk_token = DrkTokenList::new(token)?;
+        println!("{:?}", drk_token.drk_tokenlist);
+        Ok(())
+    }
 }
 }