coveralls 0.1.5

Send job to Coveralls (coveralls.io)
Documentation
use super::Env;
use std::io::Result;

#[derive(Copy, Clone, Debug, Eq, PartialEq)]
pub enum Service {
    AppVeyor,
    BuildKite,
    CircleCI,
    GithubActions,
    Jenkins,
    Semaphore,
    Travis,
}

impl Service {
    pub fn from_name(name: &str) -> Option<Service> {
        match name {
            "circleci" => Some(Service::CircleCI),
            "travis-ci" => Some(Service::Travis),
            "appveyor" => Some(Service::AppVeyor),
            "jenkins" => Some(Service::Jenkins),
            "semaphore-ci" => Some(Service::Semaphore),
            "github-actions" => Some(Service::GithubActions),
            "buildkite" => Some(Service::BuildKite),
            _ => None
        }
    }

    pub fn from_env(env: &Env) -> Result<Option<Service>> {
        if env.get_var("CIRCLECI")?.is_some() {
            return Ok(Some(Service::CircleCI));
        }

        if env.get_var("TRAVIS")?.is_some() {
            return Ok(Some(Service::Travis));
        }

        if env.get_var("GITHUB_ACTIONS")?.is_some() {
            return Ok(Some(Service::GithubActions));
        }

        if env.get_var("JENKINS_HOME")?.is_some() {
            return Ok(Some(Service::Jenkins));
        }

        if env.get_var("APPVEYOR")?.is_some() {
            return Ok(Some(Service::AppVeyor));
        }

        if env.get_var("SEMAPHORE")?.is_some() {
            return Ok(Some(Service::Semaphore));
        }

        if env.get_var("BUILDKITE")?.is_some() {
            return Ok(Some(Service::BuildKite));
        }

        Ok(None)
    }

    pub fn get_name(&self) -> &'static str {
        match self {
            Self::CircleCI => "circleci",
            Self::AppVeyor => "appveyor",
            Self::BuildKite => "buildkite",
            Self::GithubActions => "github-actions",
            Self::Jenkins => "jenkins",
            Self::Semaphore => "semaphore-ci",
            Self::Travis => "travis-ci",
        }
    }
}