orbiter 0.9.0

A cross-shell plugin and package manager
Documentation
use serde::{Deserialize, Serialize};

pub mod github;

#[derive(Debug, PartialEq, Serialize, Deserialize)]
pub enum Providers {
    #[serde(rename = "github")]
    GitHub,
    #[serde(rename = "gitlab")]
    GitLab,
    #[serde(rename = "gitee")]
    Gitee,
}

impl From<&str> for Providers {
    fn from(s: &str) -> Self {
        match s {
            "github" => Providers::GitHub,
            "gitlab" => Providers::GitLab,
            "gitee" => Providers::Gitee,
            _ => Providers::GitHub,
        }
    }
}

impl From<&Option<String>> for Providers {
    fn from(s: &Option<String>) -> Self {
        if let Some(provider_type) = s {
            Providers::from(provider_type.as_str())
        } else {
            Providers::GitHub
        }
    }
}

impl From<&Providers> for Providers {
    fn from(s: &Providers) -> Self {
        s.into()
    }
}

impl From<&Option<Providers>> for Providers {
    fn from(s: &Option<Providers>) -> Self {
        match s {
            Some(ss) => ss.into(),
            None => Providers::GitHub,
        }
    }
}