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 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213
use std::collections::BTreeMap; use serde::{Deserialize, Serialize}; /// The data type for our configuration files. #[derive(Debug, Deserialize, Serialize)] pub struct Config { pub users: BTreeMap<String, UserConfig>, pub groups: BTreeMap<String, GroupConfig>, pub buildings: BTreeMap<String, BuildingConfig>, pub resources: BTreeMap<String, ResourceConfig>, pub links: BTreeMap<String, LinkConfig>, pub labels: Vec<LabelConfig>, } /// The data type for a user. #[derive(Debug, Clone, Deserialize, Serialize)] pub struct UserConfig { pub first_name: String, pub last_name: String, pub username: String, #[serde(skip_serializing_if = "Option::is_none")] pub aliases: Option<Vec<String>>, #[serde(skip_serializing_if = "Option::is_none")] pub recovery_email: Option<String>, #[serde(skip_serializing_if = "Option::is_none")] pub recovery_phone: Option<String>, #[serde(skip_serializing_if = "Option::is_none")] pub gender: Option<String>, #[serde(skip_serializing_if = "Option::is_none")] pub chat: Option<String>, #[serde(skip_serializing_if = "Option::is_none")] pub github: Option<String>, #[serde(skip_serializing_if = "Option::is_none")] pub twitter: Option<String>, #[serde(skip_serializing_if = "Option::is_none")] pub groups: Option<Vec<String>>, #[serde(skip_serializing_if = "Option::is_none")] pub is_super_admin: Option<bool>, #[serde(skip_serializing_if = "Option::is_none")] pub building: Option<String>, } /// The data type for a group. This applies to Google Groups. #[derive(Debug, Clone, Deserialize, Serialize)] pub struct GroupConfig { pub name: String, pub description: String, #[serde(skip_serializing_if = "Option::is_none")] pub aliases: Option<Vec<String>>, /// allow_external_members: Identifies whether members external to your /// organization can join the group. Possible values are: /// - true: G Suite users external to your organization can become /// members of this group. /// - false: Users not belonging to the organization are not allowed to /// become members of this group. pub allow_external_members: bool, /// allow_web_posting: Allows posting from web. Possible values are: /// - true: Allows any member to post to the group forum. /// - false: Members only use Gmail to communicate with the group. pub allow_web_posting: bool, /// is_archived: Allows the Group contents to be archived. Possible values /// are: /// - true: Archive messages sent to the group. /// - false: Do not keep an archive of messages sent to this group. If /// false, previously archived messages remain in the archive. pub is_archived: bool, /// who_can_discover_group: Specifies the set of users for whom this group /// is discoverable. Possible values are: /// - ANYONE_CAN_DISCOVER /// - ALL_IN_DOMAIN_CAN_DISCOVER /// - ALL_MEMBERS_CAN_DISCOVER pub who_can_discover_group: String, /// who_can_join: Permission to join group. Possible values are: /// - ANYONE_CAN_JOIN: Anyone in the account domain can join. This /// includes accounts with multiple domains. /// - ALL_IN_DOMAIN_CAN_JOIN: Any Internet user who is outside your /// domain can access your Google Groups service and view the list of /// groups in your Groups directory. Warning: Group owners can add /// external addresses, outside of the domain to their groups. They can /// also allow people outside your domain to join their groups. If you /// later disable this option, any external addresses already added to /// users' groups remain in those groups. /// - INVITED_CAN_JOIN: Candidates for membership can be invited to join. /// /// - CAN_REQUEST_TO_JOIN: Non members can request an invitation to join. pub who_can_join: String, /// who_can_moderate_members: Specifies who can manage members. Possible /// values are: /// - ALL_MEMBERS /// - OWNERS_AND_MANAGERS /// - OWNERS_ONLY /// - NONE pub who_can_moderate_members: String, /// who_can_post_message: Permissions to post messages. Possible values are: /// /// - NONE_CAN_POST: The group is disabled and archived. No one can post /// a message to this group. /// - When archiveOnly is false, updating who_can_post_message to /// NONE_CAN_POST, results in an error. /// - If archiveOnly is reverted from true to false, who_can_post_messages /// is set to ALL_MANAGERS_CAN_POST. /// - ALL_MANAGERS_CAN_POST: Managers, including group owners, can post /// messages. /// - ALL_MEMBERS_CAN_POST: Any group member can post a message. /// - ALL_OWNERS_CAN_POST: Only group owners can post a message. /// - ALL_IN_DOMAIN_CAN_POST: Anyone in the account can post a message. /// /// - ANYONE_CAN_POST: Any Internet user who outside your account can /// access your Google Groups service and post a message. Note: When /// who_can_post_message is set to ANYONE_CAN_POST, we recommend the /// messageModerationLevel be set to MODERATE_NON_MEMBERS to protect the /// group from possible spam. pub who_can_post_message: String, /// who_can_view_group: Permissions to view group messages. Possible values /// are: /// - ANYONE_CAN_VIEW: Any Internet user can view the group's messages. /// /// - ALL_IN_DOMAIN_CAN_VIEW: Anyone in your account can view this /// group's messages. /// - ALL_MEMBERS_CAN_VIEW: All group members can view the group's /// messages. /// - ALL_MANAGERS_CAN_VIEW: Any group manager can view this group's /// messages. pub who_can_view_group: String, /// who_can_view_membership: Permissions to view membership. Possible values /// are: /// - ALL_IN_DOMAIN_CAN_VIEW: Anyone in the account can view the group /// members list. /// If a group already has external members, those members can still send /// email to this group. /// /// - ALL_MEMBERS_CAN_VIEW: The group members can view the group members /// list. /// - ALL_MANAGERS_CAN_VIEW: The group managers can view group members /// list. pub who_can_view_membership: String, } /// The data type for a building. #[derive(Debug, Clone, Deserialize, Serialize)] pub struct BuildingConfig { pub name: String, pub description: String, pub address: String, pub city: String, pub state: String, pub zipcode: String, pub country: String, pub floors: Vec<String>, } /// The data type for a resource. These are conference rooms that people can book /// through GSuite or Zoom. #[derive(Debug, Clone, Deserialize, Serialize)] pub struct ResourceConfig { pub name: String, pub description: String, #[serde(rename = "type")] pub typev: String, pub building: String, pub capacity: i32, pub floor: String, pub section: String, #[serde(skip_serializing_if = "Option::is_none")] pub is_zoom_room: Option<bool>, } /// The data type for a link. These get turned into short links like /// `{name}.corp.oxide.compuer` by the `shorturls` subcommand. #[derive(Debug, Clone, Deserialize, Serialize)] pub struct LinkConfig { /// name will not be used in config files. #[serde(skip_serializing_if = "Option::is_none")] pub name: Option<String>, pub description: String, pub link: String, #[serde(skip_serializing_if = "Option::is_none")] pub aliases: Option<Vec<String>>, /// subdomain will not be used in config files. #[serde(skip_serializing_if = "Option::is_none")] pub subdomain: Option<String>, /// discussion will not be used in config files. #[serde(skip_serializing_if = "Option::is_none")] pub discussion: Option<String>, } /// The data type for a label. These become GitHub labels for all the repositories /// in our organization. #[derive(Debug, Clone, Deserialize, Serialize)] pub struct LabelConfig { pub name: String, pub description: String, pub color: String, }