#![allow(dead_code)]
#[derive(Debug, Clone)]
pub enum Symbol {
EuroUsd,
AudCad,
AudChf,
AudNzd,
AudUsd,
CadChf,
CadJpy,
ChfJpy,
EurAud,
EurCad,
EurChf,
EurGbp,
EurJpy,
EurNzd,
GbpAud,
GbpCad,
GbpChf,
GbpJpy,
GbpNzd,
GbpUsd,
NzdCad,
NzdChf,
NzdJpy,
NzdUsd,
UsdCad,
UsdChf,
XagUsd,
XauAud,
XauEur,
XauUsd
}
#[derive(Debug, Clone)]
pub struct SymbolSpread {
pub symbol: Symbol,
pub spread: f64,
pub ask: f64,
pub bid: f64
}
impl SymbolSpread {
pub fn new(symbol: Symbol, spread: f64, ask: f64, bid: f64) -> Self {
Self {
symbol,
spread,
ask,
bid
}
}
}
pub trait FromStr {
fn from_str(symbol: &str) -> Result<Self, String> where Self: Sized;
}
pub trait IsSymbol {
fn is_valid_symbol(symbol: &str) -> bool;
}
impl IsSymbol for Symbol {
fn is_valid_symbol(
symbol: &str
) -> bool {
matches!(symbol, "EURUSD" | "AUDCAD" | "AUDCHF" | "AUDNZD" | "AUDUSD" | "CADCHF" | "CADJPY" | "CHFJPY" | "EURAUD" | "EURCAD" | "EURCHF" | "EURGBP" | "EURJPY" | "EURNZD" | "GBPAUD" | "GBPCAD" | "GBPCHF" | "GBPJPY" | "GBPNZD" | "GBPUSD" | "NZDCAD" | "NZDCHF" | "NZDJPY" | "NZDUSD" | "USDCAD" | "USDCHF" | "XAGUSD" | "XAUAUD" | "XAUEUR" | "XAUUSD")
}
}
impl FromStr for Symbol {
fn from_str(
symbol: &str
) -> Result<Self, String> {
match symbol {
"EURUSD" => Ok(Self::EuroUsd),
"AUDCAD" => Ok(Self::AudCad),
"AUDCHF" => Ok(Self::AudChf),
"AUDNZD" => Ok(Self::AudNzd),
"AUDUSD" => Ok(Self::AudUsd),
"CADCHF" => Ok(Self::CadChf),
"CADJPY" => Ok(Self::CadJpy),
"CHFJPY" => Ok(Self::ChfJpy),
"EURAUD" => Ok(Self::EurAud),
"EURCAD" => Ok(Self::EurCad),
"EURCHF" => Ok(Self::EurChf),
"EURGBP" => Ok(Self::EurGbp),
"EURJPY" => Ok(Self::EurJpy),
"EURNZD" => Ok(Self::EurNzd),
"GBPAUD" => Ok(Self::GbpAud),
"GBPCAD" => Ok(Self::GbpCad),
"GBPCHF" => Ok(Self::GbpChf),
"GBPJPY" => Ok(Self::GbpJpy),
"GBPNZD" => Ok(Self::GbpNzd),
"GBPUSD" => Ok(Self::GbpUsd),
"NZDCAD" => Ok(Self::NzdCad),
"NZDCHF" => Ok(Self::NzdChf),
"NZDJPY" => Ok(Self::NzdJpy),
"NZDUSD" => Ok(Self::NzdUsd),
"USDCAD" => Ok(Self::UsdCad),
"USDCHF" => Ok(Self::UsdChf),
"XAGUSD" => Ok(Self::XagUsd),
"XAUAUD" => Ok(Self::XauAud),
"XAUEUR" => Ok(Self::XauEur),
"XAUUSD" => Ok(Self::XauUsd),
_ => Err("Invalid symbol".to_string())
}
}
}
use std::fmt;
impl fmt::Display for Symbol {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let symbol_str = match self {
Self::EuroUsd => "EURUSD",
Self::AudCad => "AUDCAD",
Self::AudChf => "AUDCHF",
Self::AudNzd => "AUDNZD",
Self::AudUsd => "AUDUSD",
Self::CadChf => "CADCHF",
Self::CadJpy => "CADJPY",
Self::ChfJpy => "CHFJPY",
Self::EurAud => "EURAUD",
Self::EurCad => "EURCAD",
Self::EurChf => "EURCHF",
Self::EurGbp => "EURGBP",
Self::EurJpy => "EURJPY",
Self::EurNzd => "EURNZD",
Self::GbpAud => "GBPAUD",
Self::GbpCad => "GBPCAD",
Self::GbpChf => "GBPCHF",
Self::GbpJpy => "GBPJPY",
Self::GbpNzd => "GBPNZD",
Self::GbpUsd => "GBPUSD",
Self::NzdCad => "NZDCAD",
Self::NzdChf => "NZDCHF",
Self::NzdJpy => "NZDJPY",
Self::NzdUsd => "NZDUSD",
Self::UsdCad => "USDCAD",
Self::UsdChf => "USDCHF",
Self::XagUsd => "XAGUSD",
Self::XauAud => "XAUAUD",
Self::XauEur => "XAUEUR",
Self::XauUsd => "XAUUSD",
};
write!(f, "{}", symbol_str)
}
}
pub struct HttpsUrl {
pub url: String
}
impl HttpsUrl {
fn verify_url(&self) -> bool {
self.url.starts_with("https://")
}
}