use serde::{Deserialize, Serialize};
#[cfg(feature = "cli")]
use structopt::StructOpt;
use crate::is_default;
#[derive(Serialize, Debug, Clone, PartialEq)]
#[serde(rename_all = "lowercase")]
pub enum Expand {
Organization,
Scopes,
}
#[cfg_attr(feature = "cli", derive(StructOpt))]
#[derive(Serialize, Debug, Default, Clone, PartialEq)]
pub struct GroupFilters {
#[serde(skip_serializing_if = "is_default")]
#[cfg_attr(feature = "cli", structopt(default_value = "hypothes.is", long))]
pub authority: String,
#[serde(skip_serializing_if = "is_default")]
#[cfg_attr(feature = "cli", structopt(default_value, long))]
pub document_uri: String,
#[serde(skip_serializing_if = "is_default")]
#[cfg_attr(feature = "cli", structopt(long, possible_values = & Expand::variants()))]
pub expand: Vec<Expand>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct Links {
#[serde(default)]
pub html: Option<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct Scope {
pub enforced: bool,
pub uri_patterns: Vec<String>,
}
#[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq)]
#[serde(rename_all = "lowercase")]
pub enum Type {
Private,
Open,
Restricted,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(untagged)]
pub enum Organization {
String(String),
Organization(Option<Org>),
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct Org {
pub id: String,
pub default: bool,
pub logo: Option<String>,
pub name: String,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct Group {
pub id: String,
pub groupid: Option<String>,
pub name: String,
pub links: Links,
pub organization: Organization,
#[serde(default)]
pub scopes: Option<Scope>,
pub scoped: bool,
#[serde(rename = "type")]
pub group_type: Type,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct Member {
pub authority: String,
pub username: String,
pub userid: String,
#[serde(default)]
pub display_name: Option<String>,
}