r6stats_client 0.2.3

Client for the r6stats API.
Documentation
use crate::{Platform, Region};

#[derive(Clone, Debug, Default)]
pub(crate) struct RouteBuilder {
    platform: Option<Platform>,
    region: Option<Region>,
}

impl RouteBuilder {
    pub fn new() -> Self {
        Self::default()
    }

    pub fn platform(mut self, platform: Platform) -> Self {
        self.platform = Some(platform);
        self
    }

    pub fn region(mut self, region: Option<Region>) -> Self {
        self.region = region;
        self
    }

    pub fn build(self) -> RouteInfo {
        RouteInfo {
            platform: self
                .platform
                .expect("Error creating route: Platform missing."),
            region: self.region,
        }
    }
}

#[derive(Clone, Debug)]
pub(crate) struct RouteInfo {
    pub platform: Platform,
    pub region: Option<Region>,
}

impl RouteInfo {
    pub fn path(&self) -> String {
        let region = self.region.map(Region::as_str).unwrap_or("all");
        format!(
            api!("/leaderboard/{p}/{r}"),
            p = self.platform.as_str(),
            r = region
        )
    }
}

#[cfg(test)]
mod tests {
    use super::RouteBuilder;
    use crate::{Platform, Region};

    #[test]
    fn test_routing_all_regions() {
        let route = RouteBuilder::new().platform(Platform::Pc).build();

        assert_eq!(route.path(), api!("/leaderboard/pc/all"));
    }

    #[test]
    fn test_routing_with_region() {
        let route = RouteBuilder::new()
            .platform(Platform::Pc)
            .region(Some(Region::Apac))
            .build();

        assert_eq!(route.path(), api!("/leaderboard/pc/apac"));
    }
}