graph_core/resource/
resource_identity.rs

1use std::fmt::Display;
2use inflector::Inflector;
3
4/// Comprises both top level and second level resources.
5/// These are not generated from OpenApi, except for top level resources,
6/// and mostly consist of Apis that the project currently has generated.
7#[remain::sorted]
8#[derive(
9    AsRefStr,
10    Copy,
11    Clone,
12    Eq,
13    PartialEq,
14    EnumString,
15    EnumIter,
16    Debug,
17    Ord,
18    PartialOrd,
19    Hash,
20    Serialize,
21    Deserialize,
22)]
23#[strum(serialize_all = "camelCase")]
24#[derive(Default)]
25#[non_exhaustive]
26pub enum ResourceIdentity {
27    AccessPackageAssignmentApprovals,
28    AccessPackages,
29    AccessReviews,
30    AccessReviewsDefinitions,
31    AccessReviewsDefinitionsInstances,
32    AccessReviewsDefinitionsInstancesStages,
33    Activities,
34    Admin,
35    AdministrativeUnits,
36    AgreementAcceptances,
37    Agreements,
38    AllChannels,
39    AndroidManagedAppProtections,
40    AppCatalogs,
41    AppConsent,
42    Application,
43    Applications,
44    ApplicationTemplates,
45    Appointments,
46    AppRoleAssignments,
47    AssignmentPolicies,
48    AssignmentRequests,
49    Assignments,
50    AuditLogs,
51    Authentication,
52    AuthenticationMethodConfigurations,
53    AuthenticationMethodsPolicy,
54    Batch, // Specifically for $batch requests.
55    BookingBusinesses,
56    Branding,
57    Buckets,
58    CalendarGroups,
59    Calendars,
60    CalendarView,
61    CallRecords,
62    CallRecordsSessions,
63    Calls,
64    CertificateBasedAuthConfiguration,
65    Channels,
66    Chats,
67    ChatsAndChannelsMessages,
68    ChatsMessages,
69    ChatsMessagesReplies,
70    ChildFolders,
71    Communications,
72    Compliance,
73    ConnectedOrganizations,
74    ConnectedOrganizationsExternalSponsors,
75    ConnectedOrganizationsInternalSponsors,
76    Connections,
77    ContactFolders,
78    Contacts,
79    ContentTypes,
80    Contracts,
81    Conversations,
82    CreatedByUser,
83    CreatedObjects,
84    Custom,
85    Customers,
86    CustomQuestions,
87    DataPolicyOperations,
88    DefaultCalendar,
89    DefaultManagedAppProtections,
90    DeletedItems,
91    DeletedTeams,
92    DeviceAppManagement,
93    DeviceCompliancePolicies,
94    DeviceCompliancePolicySettingStateSummaries,
95    DeviceConfigurations,
96    DeviceEnrollmentConfigurations,
97    DeviceManagement,
98    DeviceManagementManagedDevices,
99    DeviceManagementReports,
100    Devices,
101    DevicesRegisteredOwners,
102    DevicesRegisteredUsers,
103    Directory,
104    DirectoryMembers,
105    DirectoryObjects,
106    DirectoryRoles,
107    DirectoryRoleTemplates,
108    DirectReports,
109    DomainDnsRecords,
110    Domains,
111    Drive,
112    Drives,
113    DrivesItems,
114    DrivesList,
115    DrivesListContentTypes,
116    Education,
117    EducationAssignments,
118    EducationAssignmentsSubmissions,
119    EducationClasses,
120    EducationMe,
121    EducationSchools,
122    EducationUsers,
123    EntitlementManagement,
124    EntitlementManagementAssignments,
125    EntitlementManagementCatalogs,
126    Events,
127    EventsInstances,
128    ExtendedProperties,
129    Extensions,
130    External,
131    FollowedSites,
132    GroupLifecyclePolicies,
133    GroupSettings,
134    GroupSettingTemplates,
135    Groups,
136    GroupsOwners,
137    GroupsTeam,
138    HistoryItems,
139    Identity,
140    IdentityGovernance,
141    IdentityProtection,
142    IdentityProviders,
143    IncomingChannels,
144    InferenceClassification,
145    InformationProtection,
146    Insights,
147    Invitations,
148    IosManagedAppProtections,
149    JoinedTeams,
150    LastModifiedByUser,
151    LicenseDetails,
152    List,
153    Localizations,
154    MailboxSettings,
155    MailFolders,
156    ManagedAppPolicies,
157    ManagedAppRegistrations,
158    ManagedAppRegistrationsAppliedPolicies,
159    ManagedAppRegistrationsIntendedPolicies,
160    ManagedAppStatuses,
161    ManagedEBooks,
162    ManagedEBooksDeviceStates,
163    ManagedEBooksUserStateSummary,
164    MdmWindowsInformationProtectionPolicies,
165    #[default]
166    Me,
167    MemberOf,
168    MembersWithLicenseErrors,
169    MobileAppCategories,
170    MobileAppConfigurations,
171    MobileApps,
172    Oauth2PermissionGrants,
173    Onenote,
174    OnenoteNotebooks,
175    OnenotePages,
176    OnenoteSectionGroups,
177    OnenoteSections,
178    OnlineMeetings,
179    Organization,
180    OrgContacts,
181    Outlook,
182    OwnedDevices,
183    OwnedObjects,
184    ParentNotebook,
185    ParentSection,
186    ParentSectionGroup,
187    People,
188    PermissionGrants,
189    Photos,
190    Places,
191    Planner,
192    PlannerTasks,
193    Plans,
194    Policies,
195    Presence,
196    PrimaryChannel,
197    Print,
198    Privacy,
199    RegisteredDevices,
200    Reports,
201    RoleDefinitions,
202    RoleManagement,
203    Schedule,
204    SchemaExtensions,
205    ScopedRoleMemberOf,
206    ScopedRoleMemberships,
207    Search,
208    Security,
209    ServicePrincipals,
210    ServicePrincipalsOwners,
211    Services,
212    Settings,
213    SharedWithTeams,
214    Shares,
215    Sites,
216    SitesContentTypes,
217    SitesItems,
218    SitesItemsVersions,
219    SitesLists,
220    Solutions,
221    StaffMembers,
222    SubscribedSkus,
223    Subscriptions,
224    Tabs,
225    TargetedManagedAppConfigurations,
226    Tasks,
227    Teams,
228    TeamsMembers,
229    TeamsPrimaryChannelTabs,
230    TeamsTags,
231    TeamsTemplates,
232    Teamwork,
233    TermStore,
234    TermStoreGroups,
235    TermStoreSets,
236    TermStoreSetsChildren,
237    TermStoreSetsParentGroup,
238    TermStoreSetsRelations,
239    TermStoreSetsTerms,
240    TermStores,
241    TermsAndConditions,
242    Threads,
243    ThreadsPosts,
244    Todo,
245    TodoLists,
246    TodoListsTasks,
247    TransitiveMemberOf,
248    TransitiveMembers,
249    TroubleshootingEvents,
250    Users,
251    UsersAttachments,
252    UsersManagedDevices,
253    UsersMessages,
254    VirtualEvents,
255    VirtualEventsEvents,
256    VirtualEventsSessions,
257    VirtualEventsWebinars,
258    VppTokens,
259    WindowsAutopilotDeviceIdentities,
260    WindowsInformationProtectionPolicies,
261    Workbook,
262    WorkbookFunctions,
263    WorkbookTables,
264    WorkbookTablesColumns,
265    WorkbookTablesRows,
266    Worksheets,
267    WorksheetsCharts,
268    WorksheetsChartsAxes,
269    WorksheetsChartsAxesCategoryAxis,
270    WorksheetsChartsAxesSeriesAxis,
271    WorksheetsChartsAxesValueAxis,
272    WorksheetsChartsDataLabels,
273    WorksheetsChartsFormat,
274    WorksheetsChartsLegend,
275    WorksheetsChartsSeries,
276    WorksheetsChartsTitle,
277}
278
279impl Display for ResourceIdentity {
280    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
281        let str = match self {
282            ResourceIdentity::AccessPackages => "accessPackages".to_string(),
283            ResourceIdentity::AccessReviewsDefinitions => "definitions".to_string(),
284            ResourceIdentity::AccessReviewsDefinitionsInstances => "instances".to_string(),
285            ResourceIdentity::AccessReviewsDefinitionsInstancesStages => "stages".to_string(),
286            ResourceIdentity::DeviceManagementManagedDevices
287            | ResourceIdentity::UsersManagedDevices => "managedDevices".to_string(),
288            ResourceIdentity::DeviceManagementReports => "reports".into(),
289            ResourceIdentity::EntitlementManagementAssignments => "assignments".to_string(),
290            ResourceIdentity::EntitlementManagementCatalogs => "catalogs".to_string(),
291            ResourceIdentity::PrimaryChannel => "primaryChannel".to_string(),
292            ResourceIdentity::TeamsTags => "tags".to_string(),
293            ResourceIdentity::DirectoryMembers | ResourceIdentity::TeamsMembers => {
294                "members".to_string()
295            }
296            ResourceIdentity::SharedWithTeams => "sharedWithTeams".to_string(),
297            ResourceIdentity::DrivesList => "list".to_string(),
298            ResourceIdentity::DrivesItems | ResourceIdentity::SitesItems => "items".to_string(),
299            ResourceIdentity::SitesItemsVersions => "versions".to_string(),
300            ResourceIdentity::SitesLists => "lists".to_string(),
301            ResourceIdentity::DrivesListContentTypes | ResourceIdentity::SitesContentTypes => {
302                "contentTypes".to_string()
303            }
304            ResourceIdentity::Conversations => "conversations".into(),
305            ResourceIdentity::GroupsOwners | ResourceIdentity::ServicePrincipalsOwners => {
306                "owners".into()
307            }
308            ResourceIdentity::GroupsTeam => "team".into(),
309            ResourceIdentity::ThreadsPosts => "posts".into(),
310            ResourceIdentity::Threads => "threads".into(),
311            ResourceIdentity::Activities => "activities".to_string(),
312            ResourceIdentity::AgreementAcceptances => "agreementAcceptances".to_string(),
313            ResourceIdentity::AppRoleAssignments => "appRoleAssignments".to_string(),
314            ResourceIdentity::Authentication => "authentication".to_string(),
315            ResourceIdentity::DefaultCalendar => "calendar".to_string(),
316            ResourceIdentity::CalendarGroups => "calendarGroups".to_string(),
317            ResourceIdentity::CalendarView => "calendarView".to_string(),
318            ResourceIdentity::Calendars => "calendars".to_string(),
319            ResourceIdentity::Chats => "chats".to_string(),
320            ResourceIdentity::ChatsMessages => "messages".to_string(),
321            ResourceIdentity::ChatsMessagesReplies => "replies".to_string(),
322            ResourceIdentity::ContactFolders => "contactFolders".to_string(),
323            ResourceIdentity::Contacts => "contacts".to_string(),
324            ResourceIdentity::CreatedObjects => "createdObjects".to_string(),
325            ResourceIdentity::DirectReports => "directReports".to_string(),
326            ResourceIdentity::Drives => "drives".to_string(),
327            ResourceIdentity::Events => "events".to_string(),
328            ResourceIdentity::Extensions => "extensions".to_string(),
329            ResourceIdentity::FollowedSites => "followedSites".to_string(),
330            ResourceIdentity::InferenceClassification => "inferenceClassification".to_string(),
331            ResourceIdentity::Insights => "insights".to_string(),
332            ResourceIdentity::JoinedTeams => "joinedTeams".to_string(),
333            ResourceIdentity::LicenseDetails => "licenseDetails".to_string(),
334            ResourceIdentity::MailFolders => "mailFolders".to_string(),
335            ResourceIdentity::ManagedAppRegistrations => "managedAppRegistrations".to_string(),
336            ResourceIdentity::ManagedAppRegistrationsAppliedPolicies => {
337                "appliedPolicies".to_string()
338            }
339            ResourceIdentity::ManagedAppRegistrationsIntendedPolicies => {
340                "intendedPolicies".to_string()
341            }
342            ResourceIdentity::ManagedEBooksDeviceStates => "deviceStates".to_string(),
343            ResourceIdentity::ManagedEBooksUserStateSummary => "userStateSummary".to_string(),
344            ResourceIdentity::MemberOf => "memberOf".to_string(),
345            ResourceIdentity::Oauth2PermissionGrants => "oauth2PermissionGrants".to_string(),
346            ResourceIdentity::Onenote => "onenote".to_string(),
347            ResourceIdentity::OnlineMeetings => "onlineMeetings".to_string(),
348            ResourceIdentity::Outlook => "outlook".to_string(),
349            ResourceIdentity::OwnedDevices => "ownedDevices".to_string(),
350            ResourceIdentity::OwnedObjects => "ownedObjects".to_string(),
351            ResourceIdentity::People => "people".to_string(),
352            ResourceIdentity::Photos => "photos".to_string(),
353            ResourceIdentity::Planner => "planner".to_string(),
354            ResourceIdentity::Presence => "presence".to_string(),
355            ResourceIdentity::RegisteredDevices => "registeredDevices".to_string(),
356            ResourceIdentity::ScopedRoleMemberOf => "scopedRoleMemberOf".to_string(),
357            ResourceIdentity::Teamwork => "teamwork".to_string(),
358            ResourceIdentity::Todo => "todo".to_string(),
359            ResourceIdentity::TransitiveMemberOf => "transitiveMemberOf".to_string(),
360
361            ResourceIdentity::ConnectedOrganizationsExternalSponsors => {
362                "externalSponsors".to_string()
363            }
364            ResourceIdentity::ConnectedOrganizationsInternalSponsors => {
365                "internalSponsors".to_string()
366            }
367            ResourceIdentity::CallRecordsSessions => "sessions".to_string(),
368            ResourceIdentity::EducationAssignmentsSubmissions => "submissions".to_string(),
369            ResourceIdentity::EducationAssignments => "assignments".to_string(),
370            ResourceIdentity::EducationClasses => "classes".to_string(),
371            ResourceIdentity::EducationMe => "me".to_string(),
372            ResourceIdentity::EducationUsers => "users".to_string(),
373            ResourceIdentity::EducationSchools => "schools".to_string(),
374            ResourceIdentity::TodoLists => "lists".to_string(),
375            ResourceIdentity::TodoListsTasks => "tasks".to_string(),
376            ResourceIdentity::UsersMessages => "messages".into(),
377            ResourceIdentity::UsersAttachments => "attachments".into(),
378            ResourceIdentity::EventsInstances => "instances".into(),
379            ResourceIdentity::PlannerTasks => "tasks".into(),
380            ResourceIdentity::OnenoteSections => "sections".into(),
381            ResourceIdentity::OnenoteSectionGroups => "sectionGroups".into(),
382            ResourceIdentity::OnenoteNotebooks => "notebooks".into(),
383            ResourceIdentity::OnenotePages => "pages".into(),
384            ResourceIdentity::TermStoreSets => "sets".into(),
385            ResourceIdentity::TermStoreGroups => "groups".into(),
386            ResourceIdentity::TermStoreSetsChildren => "children".into(),
387            ResourceIdentity::TermStoreSetsParentGroup => "parentGroup".into(),
388            ResourceIdentity::TermStoreSetsRelations => "relations".into(),
389            ResourceIdentity::TermStoreSetsTerms => "terms".into(),
390            ResourceIdentity::VirtualEvents => "virtualEvents".into(),
391            ResourceIdentity::VirtualEventsEvents => "events".into(),
392            ResourceIdentity::VirtualEventsSessions => "sessions".into(),
393            ResourceIdentity::VirtualEventsWebinars => "webinars".into(),
394            ResourceIdentity::WorkbookFunctions => "functions".into(),
395            ResourceIdentity::WorkbookTables => "tables".into(),
396            ResourceIdentity::WorkbookTablesColumns => "columns".into(),
397            ResourceIdentity::WorkbookTablesRows => "rows".into(),
398            ResourceIdentity::WorksheetsCharts => "charts".into(),
399            ResourceIdentity::WorksheetsChartsAxes => "axes".into(),
400            ResourceIdentity::WorksheetsChartsLegend => "legend".into(),
401            ResourceIdentity::WorksheetsChartsSeries => "series".into(),
402            ResourceIdentity::WorksheetsChartsFormat => "format".into(),
403            ResourceIdentity::WorksheetsChartsTitle => "title".into(),
404            ResourceIdentity::WorksheetsChartsDataLabels => "dataLabels".into(),
405            ResourceIdentity::WorksheetsChartsAxesCategoryAxis => "categoryAxis".into(),
406            ResourceIdentity::WorksheetsChartsAxesSeriesAxis => "seriesAxis".into(),
407            ResourceIdentity::WorksheetsChartsAxesValueAxis => "valueAxis".into(),
408            ResourceIdentity::DevicesRegisteredOwners => "registeredOwners".into(),
409            ResourceIdentity::DevicesRegisteredUsers => "registeredUsers".into(),
410            ResourceIdentity::Custom => "".into(),
411
412            _ => self.as_ref().to_camel_case(),
413        };
414        write!(f, "{}", str)
415    }
416}
417
418impl ResourceIdentity {
419    pub fn enum_string(&self) -> String {
420        format!("ResourceIdentity::{self:#?}")
421    }
422
423    pub fn to_path_start(&self) -> String {
424        format!("/{}", self)
425    }
426
427    pub fn replace(&self, from: &str, to: &str) -> String {
428        self.as_ref().replace(from, to)
429    }
430
431    pub fn exact_camel_case(&self) -> String {
432        self.as_ref().to_camel_case()
433    }
434
435    pub fn exact_pascal_case(&self) -> String {
436        self.as_ref().to_pascal_case()
437    }
438
439    pub fn exact_snake_case(&self) -> String {
440        self.as_ref().to_snake_case()
441    }
442}
443
444/// Top level resources are the names for the first or beginning part of a URI path.
445/// These are generated from the OpenApi config.
446#[derive(
447    AsRefStr,
448    Copy,
449    Clone,
450    Eq,
451    PartialEq,
452    EnumString,
453    EnumIter,
454    Debug,
455    Ord,
456    PartialOrd,
457    Hash,
458    Serialize,
459    Deserialize,
460)]
461#[strum(serialize_all = "camelCase")]
462#[derive(Default)]
463pub enum TopLevelResource {
464    Admin,
465    AgreementAcceptances,
466    Agreements,
467    AppCatalogs,
468    ApplicationTemplates,
469    Applications,
470    AuditLogs,
471    AuthenticationMethodConfigurations,
472    AuthenticationMethodsPolicy,
473    Branding,
474    CertificateBasedAuthConfiguration,
475    Chats,
476    Communications,
477    Compliance,
478    Connections,
479    Contacts,
480    Contracts,
481    DataPolicyOperations,
482    DeviceAppManagement,
483    DeviceManagement,
484    Devices,
485    Directory,
486    DirectoryObjects,
487    DirectoryRoleTemplates,
488    DirectoryRoles,
489    DomainDnsRecords,
490    Domains,
491    Drive,
492    Drives,
493    Education,
494    External,
495    GroupLifecyclePolicies,
496    GroupSettingTemplates,
497    GroupSettings,
498    Groups,
499    Identity,
500    IdentityGovernance,
501    IdentityProtection,
502    IdentityProviders,
503    InformationProtection,
504    Invitations,
505    Localizations,
506    #[default]
507    Me,
508    Oauth2PermissionGrants,
509    Organization,
510    PermissionGrants,
511    Places,
512    Planner,
513    Policies,
514    Print,
515    Privacy,
516    Reports,
517    RoleManagement,
518    SchemaExtensions,
519    ScopedRoleMemberships,
520    Search,
521    Security,
522    ServicePrincipals,
523    Shares,
524    Sites,
525    Solutions,
526    SubscribedSkus,
527    Subscriptions,
528    Teams,
529    TeamsTemplates,
530    Teamwork,
531    Users,
532}
533
534impl Display for TopLevelResource {
535    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
536        write!(f, "{}", self.as_ref().to_camel_case())
537    }
538}