use serde::{Deserialize, Serialize};
use crate::api::browse::GitActor;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum Person {
User(Login),
Git(String),
Unknown,
}
impl Person {
pub fn login(&self) -> Option<&str> {
match self {
Person::User(Login(login)) => Some(login),
_ => None,
}
}
pub fn name(&self) -> &str {
match self {
Person::User(Login(name)) | Person::Git(name) => name,
Person::Unknown => "unknown",
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Login(String);
impl Login {
pub fn unchecked(login: impl Into<String>) -> Login {
Login(login.into())
}
}
impl From<Option<GitActor>> for Person {
fn from(actor: Option<GitActor>) -> Person {
match actor {
Some(GitActor { user: Some(u), .. }) => Person::User(Login(u.login)),
Some(GitActor { name: Some(n), .. }) if !n.is_empty() => Person::Git(n),
_ => Person::Unknown,
}
}
}