From bc28230cbee1a2603aaac56c481d904b65b1ded6 Mon Sep 17 00:00:00 2001 From: NexVeridian Date: Tue, 13 Jun 2023 07:59:46 +0000 Subject: [PATCH] 0.3.2 --- .devcontainer/Dockerfile | 3 ++ .devcontainer/devcontainer.json | 2 +- NOTES.md | 2 -- src/util.rs | 56 +++++++++++++++++---------------- 4 files changed, 33 insertions(+), 30 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 510a66b..21df266 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -15,3 +15,6 @@ RUN BTOP_VERSION=$(curl -s "https://api.github.com/repos/aristocratos/btop/relea sudo tar -xvf btop-x86_64-linux-musl.tbz && \ cd btop && ./install.sh && cd .. && \ rm -rf btop-x86_64-linux-musl.tbz btop + +RUN curl -LsSf https://get.nexte.st/latest/linux | tar zxf - -C ${CARGO_HOME:-~/.cargo}/bin +# cargo install cargo-nextest --locked diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 74d2c75..94ca9b8 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -14,6 +14,7 @@ "--name", "devcontainer-${containerWorkspaceFolderBasename}" ], + "initializeCommand": "docker rm -f devcontainer-${containerWorkspaceFolderBasename} || true", // Use 'mounts' to make the cargo cache persistent in a Docker Volume. "mounts": [ { @@ -60,7 +61,6 @@ "Gruntfuggly.todo-tree", "ms-azuretools.vscode-docker", "redhat.vscode-yaml", - "tomoki1207.pdf", "GitHub.copilot" ] } diff --git a/NOTES.md b/NOTES.md index ba055f6..fc85cba 100644 --- a/NOTES.md +++ b/NOTES.md @@ -1,4 +1,2 @@ https://ark-funds.com/ark-trade-notifications/ https://etfs.ark-funds.com/hubfs/idt/trades/ARK_Trade_06072023_0800PM_EST_6480efd1294b5.xls - - diff --git a/src/util.rs b/src/util.rs index 07c8c70..86bba98 100644 --- a/src/util.rs +++ b/src/util.rs @@ -248,7 +248,7 @@ pub fn get_api(ticker: Ticker, last_day: Option) -> Result Result> { @@ -256,7 +256,7 @@ pub fn get_csv_ark(ticker: Ticker) -> Result> { Ticker::ARKVC => "https://ark-ventures.com/wp-content/uploads/funds-etf-csv/ARK_VENTURE_FUND_HOLDINGS.csv".to_owned(), _ => format!("https://ark-funds.com/wp-content/uploads/funds-etf-csv/ARK_{}_ETF_{}_HOLDINGS.csv", ticker.value(), ticker), }; - get_data_url(url, Reader::Csv) + Reader::Csv.get_data_url(url) } pub enum Reader { @@ -264,34 +264,36 @@ pub enum Reader { Json, } -pub fn get_data_url(url: String, reader: Reader) -> Result> { - let response = Client::builder() +impl Reader { + pub fn get_data_url(&self, url: String) -> Result> { + let response = Client::builder() .user_agent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3") .build()?.get(url).send()?; - if !response.status().is_success() { - return Err(format!( - "HTTP request failed with status code: {:?}", - response.status() - ) - .into()); - } - - let data = response.text()?.into_bytes(); - - let df = match reader { - Reader::Csv => CsvReader::new(Cursor::new(data)) - .has_header(true) - .finish()? - .lazy(), - Reader::Json => { - let json_string = String::from_utf8(data)?; - let json: Value = serde_json::from_str(&json_string)?; - JsonReader::new(Cursor::new(json.to_string())) - .finish()? - .lazy() + if !response.status().is_success() { + return Err(format!( + "HTTP request failed with status code: {:?}", + response.status() + ) + .into()); } - }; - Ok(df) + let data = response.text()?.into_bytes(); + + let df: LazyFrame = match self { + Self::Csv => CsvReader::new(Cursor::new(data)) + .has_header(true) + .finish()? + .lazy(), + Self::Json => { + let json_string = String::from_utf8(data)?; + let json: Value = serde_json::from_str(&json_string)?; + JsonReader::new(Cursor::new(json.to_string())) + .finish()? + .lazy() + } + }; + + Ok(df) + } }