1use crate::error::{ApiError, Result};
4use reqwest::Client;
5use crate::pulls;
6use crate::users;
7use crate::repo_labels;
8use crate::build;
9use crate::git;
10use crate::repositories;
11use crate::assets;
12use crate::issues;
13use crate::organizations;
14use crate::followers;
15use crate::repo_contributor;
16use crate::releases;
17use crate::starring;
18use crate::artifactory;
19use crate::workspace;
20use crate::contributors;
21use crate::knowledge_base;
22use crate::git_settings;
23use crate::missions;
24use crate::activities;
25use crate::collaborators;
26use crate::ai;
27
28pub struct ApiClient {
30 base_url: String,
31 client: Client,
32 pulls: pulls::PullsClient,
33 users: users::UsersClient,
34 repo_labels: repo_labels::RepoLabelsClient,
35 build: build::BuildClient,
36 git: git::GitClient,
37 repositories: repositories::RepositoriesClient,
38 assets: assets::AssetsClient,
39 issues: issues::IssuesClient,
40 organizations: organizations::OrganizationsClient,
41 followers: followers::FollowersClient,
42 repo_contributor: repo_contributor::RepoContributorClient,
43 releases: releases::ReleasesClient,
44 starring: starring::StarringClient,
45 artifactory: artifactory::ArtifactoryClient,
46 workspace: workspace::WorkspaceClient,
47 contributors: contributors::ContributorsClient,
48 knowledge_base: knowledge_base::KnowledgeBaseClient,
49 git_settings: git_settings::GitSettingsClient,
50 missions: missions::MissionsClient,
51 activities: activities::ActivitiesClient,
52 collaborators: collaborators::CollaboratorsClient,
53 ai: ai::AiClient,
54}
55
56impl ApiClient {
57 pub fn new(base_url: String) -> Self {
59 let client = Client::new();
60 Self {
61 pulls: pulls::PullsClient::new(base_url.clone(), client.clone()),
62 users: users::UsersClient::new(base_url.clone(), client.clone()),
63 repo_labels: repo_labels::RepoLabelsClient::new(base_url.clone(), client.clone()),
64 build: build::BuildClient::new(base_url.clone(), client.clone()),
65 git: git::GitClient::new(base_url.clone(), client.clone()),
66 repositories: repositories::RepositoriesClient::new(base_url.clone(), client.clone()),
67 assets: assets::AssetsClient::new(base_url.clone(), client.clone()),
68 issues: issues::IssuesClient::new(base_url.clone(), client.clone()),
69 organizations: organizations::OrganizationsClient::new(base_url.clone(), client.clone()),
70 followers: followers::FollowersClient::new(base_url.clone(), client.clone()),
71 repo_contributor: repo_contributor::RepoContributorClient::new(base_url.clone(), client.clone()),
72 releases: releases::ReleasesClient::new(base_url.clone(), client.clone()),
73 starring: starring::StarringClient::new(base_url.clone(), client.clone()),
74 artifactory: artifactory::ArtifactoryClient::new(base_url.clone(), client.clone()),
75 workspace: workspace::WorkspaceClient::new(base_url.clone(), client.clone()),
76 contributors: contributors::ContributorsClient::new(base_url.clone(), client.clone()),
77 knowledge_base: knowledge_base::KnowledgeBaseClient::new(base_url.clone(), client.clone()),
78 git_settings: git_settings::GitSettingsClient::new(base_url.clone(), client.clone()),
79 missions: missions::MissionsClient::new(base_url.clone(), client.clone()),
80 activities: activities::ActivitiesClient::new(base_url.clone(), client.clone()),
81 collaborators: collaborators::CollaboratorsClient::new(base_url.clone(), client.clone()),
82 ai: ai::AiClient::new(base_url.clone(), client.clone()),
83 base_url,
84 client,
85 }
86 }
87
88 pub fn with_auth(self, token: &str) -> Self {
90 self
92 }
93
94 pub fn pulls(&self) -> &pulls::PullsClient {
96 &self.pulls
97 }
98 pub fn users(&self) -> &users::UsersClient {
100 &self.users
101 }
102 pub fn repo_labels(&self) -> &repo_labels::RepoLabelsClient {
104 &self.repo_labels
105 }
106 pub fn build(&self) -> &build::BuildClient {
108 &self.build
109 }
110 pub fn git(&self) -> &git::GitClient {
112 &self.git
113 }
114 pub fn repositories(&self) -> &repositories::RepositoriesClient {
116 &self.repositories
117 }
118 pub fn assets(&self) -> &assets::AssetsClient {
120 &self.assets
121 }
122 pub fn issues(&self) -> &issues::IssuesClient {
124 &self.issues
125 }
126 pub fn organizations(&self) -> &organizations::OrganizationsClient {
128 &self.organizations
129 }
130 pub fn followers(&self) -> &followers::FollowersClient {
132 &self.followers
133 }
134 pub fn repo_contributor(&self) -> &repo_contributor::RepoContributorClient {
136 &self.repo_contributor
137 }
138 pub fn releases(&self) -> &releases::ReleasesClient {
140 &self.releases
141 }
142 pub fn starring(&self) -> &starring::StarringClient {
144 &self.starring
145 }
146 pub fn artifactory(&self) -> &artifactory::ArtifactoryClient {
148 &self.artifactory
149 }
150 pub fn workspace(&self) -> &workspace::WorkspaceClient {
152 &self.workspace
153 }
154 pub fn contributors(&self) -> &contributors::ContributorsClient {
156 &self.contributors
157 }
158 pub fn knowledge_base(&self) -> &knowledge_base::KnowledgeBaseClient {
160 &self.knowledge_base
161 }
162 pub fn git_settings(&self) -> &git_settings::GitSettingsClient {
164 &self.git_settings
165 }
166 pub fn missions(&self) -> &missions::MissionsClient {
168 &self.missions
169 }
170 pub fn activities(&self) -> &activities::ActivitiesClient {
172 &self.activities
173 }
174 pub fn collaborators(&self) -> &collaborators::CollaboratorsClient {
176 &self.collaborators
177 }
178 pub fn ai(&self) -> &ai::AiClient {
180 &self.ai
181 }
182}