tenant_resolver_sdk/lib.rs
1//! Tenant Resolver SDK
2//!
3//! This crate provides the public API for the `tenant-resolver` module:
4//!
5//! - [`TenantResolverClient`] - Public API trait for consumers
6//! - [`TenantResolverPluginClient`] - Plugin API trait for implementations
7//! - [`TenantInfo`], [`TenantStatus`] - Domain models
8//! - [`TenantResolverError`] - Error types
9//! - [`TenantResolverPluginSpecV1`] - GTS schema for plugin discovery
10//!
11//! ## Usage
12//!
13//! Consumers obtain the client from `ClientHub`:
14//!
15//! ```ignore
16//! use tenant_resolver_sdk::{
17//! TenantResolverClient, GetAncestorsOptions, GetDescendantsOptions,
18//! GetTenantsOptions, IsAncestorOptions,
19//! };
20//!
21//! // Get the client from ClientHub
22//! let resolver = hub.get::<dyn TenantResolverClient>()?;
23//!
24//! // Get tenant info
25//! let tenant = resolver.get_tenant(&ctx, tenant_id).await?;
26//!
27//! // Get multiple tenants
28//! let tenants = resolver.get_tenants(&ctx, &[id1, id2], &GetTenantsOptions::default()).await?;
29//!
30//! // Get ancestors
31//! let response = resolver.get_ancestors(&ctx, tenant_id, &GetAncestorsOptions::default()).await?;
32//!
33//! // Get descendants
34//! let descendants = resolver.get_descendants(&ctx, tenant_id, &GetDescendantsOptions::default()).await?;
35//!
36//! // Check ancestry
37//! let is_anc = resolver.is_ancestor(&ctx, parent_id, child_id, &IsAncestorOptions::default()).await?;
38//! ```
39
40pub mod api;
41pub mod error;
42pub mod gts;
43pub mod models;
44pub mod plugin_api;
45
46// Re-export main types at crate root
47pub use api::TenantResolverClient;
48pub use error::TenantResolverError;
49pub use gts::TenantResolverPluginSpecV1;
50pub use models::{
51 BarrierMode, GetAncestorsOptions, GetAncestorsResponse, GetDescendantsOptions,
52 GetDescendantsResponse, GetTenantsOptions, HasStatus, IsAncestorOptions, TenantId, TenantInfo,
53 TenantRef, TenantStatus, matches_status,
54};
55pub use plugin_api::TenantResolverPluginClient;