#[cfg(feature = "cli")]
use clap::Parser;
#[cfg(feature = "cli")]
use clap::ValueEnum;
use serde::{Deserialize, Serialize};
use crate::is_default;
#[cfg_attr(feature = "cli", derive(ValueEnum))]
#[derive(Serialize, Debug, Clone, PartialEq)]
#[serde(rename_all = "lowercase")]
pub enum Expand {
Organization,
Scopes,
}
#[cfg_attr(feature = "cli", derive(Parser))]
#[derive(Serialize, Debug, Default, Clone, PartialEq)]
pub struct GroupFilters {
#[serde(skip_serializing_if = "is_default")]
#[cfg_attr(feature = "cli", clap(default_value = "hypothes.is", long))]
pub authority: String,
#[serde(skip_serializing_if = "is_default")]
#[cfg_attr(feature = "cli", clap(default_value = "", long))]
pub document_uri: String,
#[serde(skip_serializing_if = "is_default")]
#[cfg_attr(feature = "cli", clap(long, value_parser = clap::builder::EnumValueParser::<Expand>::new()))]
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>,
}