mirror of
https://github.com/NexVeridian/ark-invest-api-rust-data.git
synced 2025-09-02 01:49:12 +00:00
143 lines
4.4 KiB
Rust
143 lines
4.4 KiB
Rust
use strum_macros::EnumIter;
|
|
|
|
#[derive(Clone, Copy, PartialEq)]
|
|
pub enum DataSource {
|
|
ArkVenture,
|
|
Ark,
|
|
Shares21,
|
|
ArkEurope,
|
|
Rize,
|
|
}
|
|
|
|
#[allow(clippy::upper_case_acronyms, non_camel_case_types)]
|
|
#[derive(Debug, Default, strum_macros::Display, EnumIter, Clone, Copy, PartialEq)]
|
|
pub enum Ticker {
|
|
ARKVX,
|
|
|
|
ARKF,
|
|
ARKG,
|
|
#[default]
|
|
ARKK,
|
|
ARKQ,
|
|
ARKW,
|
|
ARKX,
|
|
|
|
ARKA,
|
|
ARKZ,
|
|
ARKC,
|
|
ARKD,
|
|
ARKY,
|
|
ARKB,
|
|
|
|
PRNT,
|
|
IZRL,
|
|
|
|
EUROPE_ARKI,
|
|
EUROPE_ARKG,
|
|
EUROPE_ARKK,
|
|
|
|
CYBR,
|
|
CYCL,
|
|
FOOD,
|
|
LIFE,
|
|
LUSA,
|
|
NFRA,
|
|
PMNT,
|
|
}
|
|
|
|
impl Ticker {
|
|
pub fn value(&self) -> &str {
|
|
match *self {
|
|
Ticker::ARKVX => "ARK_VENTURE_FUND_ARKVX_HOLDINGS.csv",
|
|
|
|
Ticker::ARKF => "FINTECH_INNOVATION",
|
|
Ticker::ARKG => "GENOMIC_REVOLUTION",
|
|
Ticker::ARKK => "INNOVATION",
|
|
Ticker::ARKQ => "AUTONOMOUS_TECH._&_ROBOTICS",
|
|
Ticker::ARKW => "NEXT_GENERATION_INTERNET",
|
|
Ticker::ARKX => "SPACE_EXPLORATION_&_INNOVATION",
|
|
|
|
Ticker::ARKA => "ARKA",
|
|
Ticker::ARKZ => "ARKZ",
|
|
Ticker::ARKC => "ARKC",
|
|
Ticker::ARKD => "ARKD",
|
|
Ticker::ARKY => "ARKY",
|
|
Ticker::ARKB => "21SHARES_BITCOIN",
|
|
|
|
Ticker::PRNT => "THE_3D_PRINTING",
|
|
Ticker::IZRL => "ISRAEL_INNOVATIVE_TECHNOLOGY",
|
|
|
|
Ticker::EUROPE_ARKI => "artificial-intelligence-robotics",
|
|
Ticker::EUROPE_ARKG => "genomic-revolution",
|
|
Ticker::EUROPE_ARKK => "innovation",
|
|
|
|
Ticker::CYBR => "cybersecurity-and-data-privacy",
|
|
Ticker::CYCL => "circular-economy-enablers",
|
|
Ticker::FOOD => "sustainable-future-of-food",
|
|
Ticker::LIFE => "environmental-impact-100",
|
|
Ticker::LUSA => "usa-environmental-impact",
|
|
Ticker::NFRA => "global-sustainable-infrastructure",
|
|
Ticker::PMNT => "digital-payments-economy",
|
|
}
|
|
}
|
|
|
|
pub fn data_source(&self) -> DataSource {
|
|
match *self {
|
|
Ticker::ARKVX => DataSource::ArkVenture,
|
|
|
|
Ticker::ARKF
|
|
| Ticker::ARKG
|
|
| Ticker::ARKK
|
|
| Ticker::ARKQ
|
|
| Ticker::ARKW
|
|
| Ticker::ARKX => DataSource::Ark,
|
|
|
|
Ticker::ARKA
|
|
| Ticker::ARKZ
|
|
| Ticker::ARKC
|
|
| Ticker::ARKD
|
|
| Ticker::ARKY
|
|
| Ticker::ARKB => DataSource::Shares21,
|
|
|
|
Ticker::PRNT | Ticker::IZRL => DataSource::Ark,
|
|
|
|
Ticker::EUROPE_ARKI | Ticker::EUROPE_ARKG | Ticker::EUROPE_ARKK => {
|
|
DataSource::ArkEurope
|
|
}
|
|
|
|
Ticker::CYBR
|
|
| Ticker::CYCL
|
|
| Ticker::FOOD
|
|
| Ticker::LIFE
|
|
| Ticker::LUSA
|
|
| Ticker::NFRA
|
|
| Ticker::PMNT => DataSource::Rize,
|
|
}
|
|
}
|
|
|
|
pub fn get_url(&self) -> String {
|
|
match self.data_source() {
|
|
DataSource::ArkVenture => format!("https://assets.ark-funds.com/fund-documents/funds-etf-csv/{}", self.value()),
|
|
DataSource::Ark => format!("https://assets.ark-funds.com/fund-documents/funds-etf-csv/ARK_{}_ETF_{}_HOLDINGS.csv", self.value(), self),
|
|
DataSource::Shares21 => format!("https://cdn.21shares-funds.com/uploads/fund-documents/us-bank/holdings/product/current/{}-Export.csv", self.value()),
|
|
DataSource::ArkEurope | DataSource::Rize => format!("https://europe.ark-funds.com/funds/{}/full-fund-holdings-download/", self.value()),
|
|
}
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
use pretty_assertions::assert_eq;
|
|
use rstest::rstest;
|
|
|
|
#[rstest]
|
|
#[case(Ticker::ARKVX, "https://assets.ark-funds.com/fund-documents/funds-etf-csv/ARK_VENTURE_FUND_ARKVX_HOLDINGS.csv")]
|
|
#[case(Ticker::ARKK, "https://assets.ark-funds.com/fund-documents/funds-etf-csv/ARK_INNOVATION_ETF_ARKK_HOLDINGS.csv")]
|
|
#[case(Ticker::ARKA, "https://cdn.21shares-funds.com/uploads/fund-documents/us-bank/holdings/product/current/ARKA-Export.csv")]
|
|
#[case(Ticker::EUROPE_ARKI, "https://europe.ark-funds.com/funds/artificial-intelligence-robotics/full-fund-holdings-download/")]
|
|
#[case(Ticker::CYBR, "https://europe.ark-funds.com/funds/cybersecurity-and-data-privacy/full-fund-holdings-download/")]
|
|
fn get_url(#[case] input: Ticker, #[case] expected: String) {
|
|
assert_eq!(input.get_url(), expected)
|
|
}
|
|
}
|