openstack_keystone_core/
provider.rs1use derive_builder::Builder;
21
22use crate::application_credential::ApplicationCredentialApi;
23use crate::application_credential::ApplicationCredentialProvider;
24#[cfg(any(test, feature = "mock"))]
25use crate::application_credential::MockApplicationCredentialProvider;
26use crate::assignment::AssignmentApi;
27use crate::assignment::AssignmentProvider;
28#[cfg(any(test, feature = "mock"))]
29use crate::assignment::MockAssignmentProvider;
30use crate::catalog::CatalogApi;
31use crate::catalog::CatalogProvider;
32#[cfg(any(test, feature = "mock"))]
33use crate::catalog::MockCatalogProvider;
34use crate::config::Config;
35use crate::error::KeystoneError;
36use crate::federation::FederationApi;
37use crate::federation::FederationProvider;
38#[cfg(any(test, feature = "mock"))]
39use crate::federation::MockFederationProvider;
40use crate::identity::IdentityApi;
41use crate::identity::IdentityProvider;
42#[cfg(any(test, feature = "mock"))]
43use crate::identity::MockIdentityProvider;
44use crate::identity_mapping::IdentityMappingApi;
45use crate::identity_mapping::IdentityMappingProvider;
46#[cfg(any(test, feature = "mock"))]
47use crate::identity_mapping::MockIdentityMappingProvider;
48use crate::k8s_auth::K8sAuthApi;
49use crate::k8s_auth::K8sAuthProvider;
50#[cfg(any(test, feature = "mock"))]
51use crate::k8s_auth::MockK8sAuthProvider;
52use crate::plugin_manager::PluginManagerApi;
53#[cfg(any(test, feature = "mock"))]
54use crate::resource::MockResourceProvider;
55use crate::resource::ResourceApi;
56use crate::resource::ResourceProvider;
57#[cfg(any(test, feature = "mock"))]
58use crate::revoke::MockRevokeProvider;
59use crate::revoke::RevokeApi;
60use crate::revoke::RevokeProvider;
61#[cfg(any(test, feature = "mock"))]
62use crate::role::MockRoleProvider;
63use crate::role::RoleApi;
64use crate::role::RoleProvider;
65#[cfg(any(test, feature = "mock"))]
66use crate::token::MockTokenProvider;
67use crate::token::TokenApi;
68use crate::token::TokenProvider;
69#[cfg(any(test, feature = "mock"))]
70use crate::trust::MockTrustProvider;
71use crate::trust::TrustApi;
72use crate::trust::TrustProvider;
73
74#[derive(Builder)]
76#[builder(pattern = "owned")]
79pub struct Provider {
80 pub config: Config,
82 application_credential: ApplicationCredentialProvider,
84 assignment: AssignmentProvider,
86 catalog: CatalogProvider,
88 federation: FederationProvider,
90 identity: IdentityProvider,
92 identity_mapping: IdentityMappingProvider,
94 k8s_auth: K8sAuthProvider,
96 resource: ResourceProvider,
98 revoke: RevokeProvider,
100 role: RoleProvider,
102 token: TokenProvider,
104 trust: TrustProvider,
106}
107
108#[cfg(any(test, feature = "mock"))]
109impl ProviderBuilder {
110 pub fn mock_application_credential(self, value: MockApplicationCredentialProvider) -> Self {
111 let mut new = self;
112 new.application_credential = Some(ApplicationCredentialProvider::Mock(value));
113 new
114 }
115
116 pub fn mock_assignment(self, value: MockAssignmentProvider) -> Self {
117 let mut new = self;
118 new.assignment = Some(AssignmentProvider::Mock(value));
119 new
120 }
121
122 pub fn mock_catalog(self, value: MockCatalogProvider) -> Self {
123 let mut new = self;
124 new.catalog = Some(CatalogProvider::Mock(value));
125 new
126 }
127
128 pub fn mock_federation(self, value: MockFederationProvider) -> Self {
129 let mut new = self;
130 new.federation = Some(FederationProvider::Mock(value));
131 new
132 }
133
134 pub fn mock_identity(self, value: MockIdentityProvider) -> Self {
135 let mut new = self;
136 new.identity = Some(IdentityProvider::Mock(value));
137 new
138 }
139 pub fn mock_identity_mapping(self, value: MockIdentityMappingProvider) -> Self {
140 let mut new = self;
141 new.identity_mapping = Some(IdentityMappingProvider::Mock(value));
142 new
143 }
144 pub fn mock_k8s_auth(self, value: MockK8sAuthProvider) -> Self {
145 let mut new = self;
146 new.k8s_auth = Some(K8sAuthProvider::Mock(value));
147 new
148 }
149 pub fn mock_resource(self, value: MockResourceProvider) -> Self {
150 let mut new = self;
151 new.resource = Some(ResourceProvider::Mock(value));
152 new
153 }
154 pub fn mock_revoke(self, value: MockRevokeProvider) -> Self {
155 let mut new = self;
156 new.revoke = Some(RevokeProvider::Mock(value));
157 new
158 }
159 pub fn mock_role(self, value: MockRoleProvider) -> Self {
160 let mut new = self;
161 new.role = Some(RoleProvider::Mock(value));
162 new
163 }
164 pub fn mock_token(self, value: MockTokenProvider) -> Self {
165 let mut new = self;
166 new.token = Some(TokenProvider::Mock(value));
167 new
168 }
169 pub fn mock_trust(self, value: MockTrustProvider) -> Self {
170 let mut new = self;
171 new.trust = Some(TrustProvider::Mock(value));
172 new
173 }
174}
175
176impl Provider {
177 pub fn new<P: PluginManagerApi>(
178 cfg: Config,
179 plugin_manager: &P,
180 ) -> Result<Self, KeystoneError> {
181 let application_credential_provider =
182 ApplicationCredentialProvider::new(&cfg, plugin_manager)?;
183 let assignment_provider = AssignmentProvider::new(&cfg, plugin_manager)?;
184 let catalog_provider = CatalogProvider::new(&cfg, plugin_manager)?;
185 let federation_provider = FederationProvider::new(&cfg, plugin_manager)?;
186 let identity_provider = IdentityProvider::new(&cfg, plugin_manager)?;
187 let identity_mapping_provider = IdentityMappingProvider::new(&cfg, plugin_manager)?;
188 let k8s_auth_provider = K8sAuthProvider::new(&cfg, plugin_manager)?;
189 let resource_provider = ResourceProvider::new(&cfg, plugin_manager)?;
190 let revoke_provider = RevokeProvider::new(&cfg, plugin_manager)?;
191 let role_provider = RoleProvider::new(&cfg, plugin_manager)?;
192 let token_provider = TokenProvider::new(&cfg, plugin_manager)?;
193 let trust_provider = TrustProvider::new(&cfg, plugin_manager)?;
194
195 Ok(Self {
196 config: cfg,
197 application_credential: application_credential_provider,
198 assignment: assignment_provider,
199 catalog: catalog_provider,
200 federation: federation_provider,
201 identity: identity_provider,
202 identity_mapping: identity_mapping_provider,
203 k8s_auth: k8s_auth_provider,
204 resource: resource_provider,
205 revoke: revoke_provider,
206 role: role_provider,
207 token: token_provider,
208 trust: trust_provider,
209 })
210 }
211
212 #[cfg(any(test, feature = "mock"))]
213 pub fn mocked_builder() -> ProviderBuilder {
214 let config = Config::default();
215 let application_credential_mock =
216 crate::application_credential::MockApplicationCredentialProvider::default();
217 let assignment_mock = crate::assignment::MockAssignmentProvider::default();
218 let catalog_mock = crate::catalog::MockCatalogProvider::default();
219 let identity_mock = crate::identity::MockIdentityProvider::default();
220 let identity_mapping_mock = crate::identity_mapping::MockIdentityMappingProvider::default();
221 let federation_mock = crate::federation::MockFederationProvider::default();
222 let k8s_auth_mock = crate::k8s_auth::MockK8sAuthProvider::default();
223 let resource_mock = crate::resource::MockResourceProvider::default();
224 let revoke_mock = crate::revoke::MockRevokeProvider::default();
225 let role_mock = crate::role::MockRoleProvider::default();
226 let token_mock = crate::token::MockTokenProvider::default();
227 let trust_mock = crate::trust::MockTrustProvider::default();
228
229 ProviderBuilder::default()
230 .config(config.clone())
231 .mock_application_credential(application_credential_mock)
232 .mock_assignment(assignment_mock)
233 .mock_catalog(catalog_mock)
234 .mock_identity(identity_mock)
235 .mock_identity_mapping(identity_mapping_mock)
236 .mock_federation(federation_mock)
237 .mock_k8s_auth(k8s_auth_mock)
238 .mock_resource(resource_mock)
239 .mock_revoke(revoke_mock)
240 .mock_role(role_mock)
241 .mock_token(token_mock)
242 .mock_trust(trust_mock)
243 }
244
245 pub fn get_application_credential_provider(&self) -> &impl ApplicationCredentialApi {
247 &self.application_credential
248 }
249
250 pub fn get_assignment_provider(&self) -> &impl AssignmentApi {
252 &self.assignment
253 }
254
255 pub fn get_catalog_provider(&self) -> &impl CatalogApi {
257 &self.catalog
258 }
259
260 pub fn get_federation_provider(&self) -> &impl FederationApi {
262 &self.federation
263 }
264
265 pub fn get_identity_provider(&self) -> &impl IdentityApi {
267 &self.identity
268 }
269
270 pub fn get_identity_mapping_provider(&self) -> &impl IdentityMappingApi {
272 &self.identity_mapping
273 }
274
275 pub fn get_k8s_auth_provider(&self) -> &impl K8sAuthApi {
277 &self.k8s_auth
278 }
279
280 pub fn get_resource_provider(&self) -> &impl ResourceApi {
282 &self.resource
283 }
284
285 pub fn get_revoke_provider(&self) -> &impl RevokeApi {
287 &self.revoke
288 }
289
290 pub fn get_role_provider(&self) -> &impl RoleApi {
292 &self.role
293 }
294
295 pub fn get_token_provider(&self) -> &impl TokenApi {
297 &self.token
298 }
299
300 pub fn get_trust_provider(&self) -> &impl TrustApi {
302 &self.trust
303 }
304}