twitch_highway 0.0.5

Twitch Api reqest Http
Documentation
use url::Url;

pub trait TestUrl {
    fn with_url<T: Into<String>>(&mut self, url: T) -> &mut Self;
    fn get_test_url(&self) -> Option<Url>;
}

#[derive(Default, Debug)]
pub struct TestUrlHold {
    test_url: Option<String>,
}

impl TestUrlHold {
    pub fn with_url<T: Into<String>>(&mut self, url: T) -> &mut Self {
        self.test_url = Some(url.into());
        self
    }

    pub fn get_test_url(&self) -> Option<Url> {
        self.test_url.as_ref().map(|url| Url::parse(url).unwrap())
    }
}

#[macro_export]
#[cfg(feature = "test")]
macro_rules! impl_testurl {
    ($type:ty) => {
        #[cfg(feature = "test")]
        impl $crate::test_url::TestUrl for $type {
            fn with_url<T: Into<String>>(&mut self, url: T) -> &mut Self {
                self.test_url.with_url(url);
                self
            }

            fn get_test_url(&self) -> Option<Url> {
                self.test_url.get_test_url()
            }
        }
    };
}

#[macro_export]
#[cfg(feature = "test")]
macro_rules! impl_get_url {
    ($self:ident) => {
        if let Some(url) = self.test_url.get_test_url() {
            return url;
        }
    };
}