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

token_list: get_symbols function and test case

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

+ 46 - 6
src/util/token_list.rs

@@ -1,22 +1,45 @@
-use crate::{Error, Result};
+use crate::{util::NetworkName, Error, Result};
 use serde_json::Value;
+use std::collections::HashMap;
 
 #[derive(Debug, Clone)]
 pub struct TokenList {
-    tokenlist: Value,
+    sol_tokenlist: Value,
+    drk_tokenlist: HashMap<NetworkName, jubjub::Fr>,
 }
 
 impl TokenList {
     pub fn new() -> Result<Self> {
         // TODO: FIXME
         let file_contents = std::fs::read_to_string("token/solanatokenlist.json")?;
-        let tokenlist: Value = serde_json::from_str(&file_contents)?;
+        let sol_tokenlist: Value = serde_json::from_str(&file_contents)?;
+        let mut drk_tokenlist = HashMap::new();
 
-        Ok(Self { tokenlist })
+        // for tkn in sol_tokenlist:
+        //          generate_id(tkn, Solana)
+        // let btc = generate_id(tkn, BTC)
+        //
+        // let tokenid = generate_id(
+        Ok(Self {
+            sol_tokenlist,
+            drk_tokenlist,
+        })
+    }
+
+    pub fn get_symbols(self) -> Result<Vec<String>> {
+        let tokens = self.sol_tokenlist["tokens"]
+            .as_array()
+            .ok_or(Error::TokenParseError)?;
+        let mut symbols = Vec::new();
+        for item in tokens {
+            let symbol = item["symbol"].as_str().unwrap();
+            symbols.push(symbol.to_string());
+        }
+        return Ok(symbols);
     }
 
     pub fn search_id(self, symbol: &str) -> Result<String> {
-        let tokens = self.tokenlist["tokens"]
+        let tokens = self.sol_tokenlist["tokens"]
             .as_array()
             .ok_or(Error::TokenParseError)?;
         for item in tokens {
@@ -30,7 +53,7 @@ impl TokenList {
     }
 
     pub fn search_decimal(self, symbol: &str) -> Result<usize> {
-        let tokens = self.tokenlist["tokens"]
+        let tokens = self.sol_tokenlist["tokens"]
             .as_array()
             .ok_or(Error::TokenParseError)?;
         for item in tokens {
@@ -44,3 +67,20 @@ impl TokenList {
         unreachable!();
     }
 }
+
+mod tests {
+
+    use super::*;
+    use crate::util::TokenList;
+    use crate::Result;
+
+    #[test]
+    pub fn test_get_symbols() -> Result<()> {
+        let token = TokenList::new()?;
+        let symbols = token.get_symbols()?;
+        for symbol in symbols {
+            println!("{}", symbol)
+        }
+        Ok(())
+    }
+}