1use crate::error::{ApiError, Result};
4use reqwest::Client;
5use crate::git_settings;
6use crate::pulls;
7use crate::git;
8use crate::event;
9use crate::build;
10use crate::repo_labels;
11use crate::assets;
12use crate::users;
13use crate::releases;
14use crate::organizations;
15use crate::workspace;
16use crate::missions;
17use crate::repositories;
18use crate::knowledge_base;
19use crate::wiki;
20use crate::followers;
21use crate::starring;
22use crate::issues;
23use crate::activities;
24use crate::ai;
25use crate::badge;
26use crate::security;
27use crate::artifactory;
28
29pub struct ApiClient {
31 base_url: String,
32 client: Client,
33 git_settings: git_settings::GitSettingsClient,
34 pulls: pulls::PullsClient,
35 git: git::GitClient,
36 event: event::EventClient,
37 build: build::BuildClient,
38 repo_labels: repo_labels::RepoLabelsClient,
39 assets: assets::AssetsClient,
40 users: users::UsersClient,
41 releases: releases::ReleasesClient,
42 organizations: organizations::OrganizationsClient,
43 workspace: workspace::WorkspaceClient,
44 missions: missions::MissionsClient,
45 repositories: repositories::RepositoriesClient,
46 knowledge_base: knowledge_base::KnowledgeBaseClient,
47 wiki: wiki::WikiClient,
48 followers: followers::FollowersClient,
49 starring: starring::StarringClient,
50 issues: issues::IssuesClient,
51 activities: activities::ActivitiesClient,
52 ai: ai::AiClient,
53 badge: badge::BadgeClient,
54 security: security::SecurityClient,
55 artifactory: artifactory::ArtifactoryClient,
56}
57
58impl ApiClient {
59 pub fn new(base_url: String) -> Self {
61 let client = Client::new();
62 Self {
63 git_settings: git_settings::GitSettingsClient::new(base_url.clone(), client.clone()),
64 pulls: pulls::PullsClient::new(base_url.clone(), client.clone()),
65 git: git::GitClient::new(base_url.clone(), client.clone()),
66 event: event::EventClient::new(base_url.clone(), client.clone()),
67 build: build::BuildClient::new(base_url.clone(), client.clone()),
68 repo_labels: repo_labels::RepoLabelsClient::new(base_url.clone(), client.clone()),
69 assets: assets::AssetsClient::new(base_url.clone(), client.clone()),
70 users: users::UsersClient::new(base_url.clone(), client.clone()),
71 releases: releases::ReleasesClient::new(base_url.clone(), client.clone()),
72 organizations: organizations::OrganizationsClient::new(base_url.clone(), client.clone()),
73 workspace: workspace::WorkspaceClient::new(base_url.clone(), client.clone()),
74 missions: missions::MissionsClient::new(base_url.clone(), client.clone()),
75 repositories: repositories::RepositoriesClient::new(base_url.clone(), client.clone()),
76 knowledge_base: knowledge_base::KnowledgeBaseClient::new(base_url.clone(), client.clone()),
77 wiki: wiki::WikiClient::new(base_url.clone(), client.clone()),
78 followers: followers::FollowersClient::new(base_url.clone(), client.clone()),
79 starring: starring::StarringClient::new(base_url.clone(), client.clone()),
80 issues: issues::IssuesClient::new(base_url.clone(), client.clone()),
81 activities: activities::ActivitiesClient::new(base_url.clone(), client.clone()),
82 ai: ai::AiClient::new(base_url.clone(), client.clone()),
83 badge: badge::BadgeClient::new(base_url.clone(), client.clone()),
84 security: security::SecurityClient::new(base_url.clone(), client.clone()),
85 artifactory: artifactory::ArtifactoryClient::new(base_url.clone(), client.clone()),
86 base_url,
87 client,
88 }
89 }
90
91 pub fn with_auth(self, token: &str) -> Self {
93 self
95 }
96
97 pub fn git_settings(&self) -> &git_settings::GitSettingsClient {
99 &self.git_settings
100 }
101 pub fn pulls(&self) -> &pulls::PullsClient {
103 &self.pulls
104 }
105 pub fn git(&self) -> &git::GitClient {
107 &self.git
108 }
109 pub fn event(&self) -> &event::EventClient {
111 &self.event
112 }
113 pub fn build(&self) -> &build::BuildClient {
115 &self.build
116 }
117 pub fn repo_labels(&self) -> &repo_labels::RepoLabelsClient {
119 &self.repo_labels
120 }
121 pub fn assets(&self) -> &assets::AssetsClient {
123 &self.assets
124 }
125 pub fn users(&self) -> &users::UsersClient {
127 &self.users
128 }
129 pub fn releases(&self) -> &releases::ReleasesClient {
131 &self.releases
132 }
133 pub fn organizations(&self) -> &organizations::OrganizationsClient {
135 &self.organizations
136 }
137 pub fn workspace(&self) -> &workspace::WorkspaceClient {
139 &self.workspace
140 }
141 pub fn missions(&self) -> &missions::MissionsClient {
143 &self.missions
144 }
145 pub fn repositories(&self) -> &repositories::RepositoriesClient {
147 &self.repositories
148 }
149 pub fn knowledge_base(&self) -> &knowledge_base::KnowledgeBaseClient {
151 &self.knowledge_base
152 }
153 pub fn wiki(&self) -> &wiki::WikiClient {
155 &self.wiki
156 }
157 pub fn followers(&self) -> &followers::FollowersClient {
159 &self.followers
160 }
161 pub fn starring(&self) -> &starring::StarringClient {
163 &self.starring
164 }
165 pub fn issues(&self) -> &issues::IssuesClient {
167 &self.issues
168 }
169 pub fn activities(&self) -> &activities::ActivitiesClient {
171 &self.activities
172 }
173 pub fn ai(&self) -> &ai::AiClient {
175 &self.ai
176 }
177 pub fn badge(&self) -> &badge::BadgeClient {
179 &self.badge
180 }
181 pub fn security(&self) -> &security::SecurityClient {
183 &self.security
184 }
185 pub fn artifactory(&self) -> &artifactory::ArtifactoryClient {
187 &self.artifactory
188 }
189}