1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
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>,
}