Просмотр исходного кода

token_list: made new search_all_id function for traversing the loop

lunar-mining 4 лет назад
Родитель
Сommit
7e71ebb7e9
1 измененных файлов с 31 добавлено и 7 удалено
  1. 31 7
      src/util/token_list.rs

+ 31 - 7
src/util/token_list.rs

@@ -54,6 +54,21 @@ impl SolTokenList {
         unreachable!();
     }
 
+    pub fn search_all_id(&self, symbol: &str) -> Result<Vec<String>> {
+        let tokens = self.sol_tokenlist["tokens"]
+            .as_array()
+            .ok_or(Error::TokenParseError)?;
+        let mut ids = Vec::new();
+        for item in tokens {
+            if item["symbol"] == symbol.to_uppercase() {
+                let address = item["address"].clone();
+                let address = address.as_str().ok_or(Error::TokenParseError)?;
+                ids.push(address.to_string());
+            }
+        }
+        return Ok(ids);
+    }
+
     pub fn search_decimal(self, symbol: &str) -> Result<usize> {
         let tokens = self.sol_tokenlist["tokens"]
             .as_array()
@@ -77,14 +92,14 @@ pub struct DrkTokenList {
 impl DrkTokenList {
     pub fn new(list: SolTokenList) -> Result<Self> {
         let mut drk_tokenlist = HashMap::new();
-        //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
+        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
         Ok(Self { drk_tokenlist })
     }
 }
@@ -104,4 +119,13 @@ mod tests {
         }
         Ok(())
     }
+    #[test]
+    pub fn test_get_id_from_symbols() -> Result<()> {
+        let token = SolTokenList::new()?;
+        let symbols = token.clone().get_symbols()?;
+        for symbol in symbols {
+            token.clone().search_all_id(&symbol)?;
+        }
+        Ok(())
+    }
 }