Skip to main content

backstage_client/
lib.rs

1//! # Backstage Client Library
2//!
3//! A Rust client library for interacting with the Backstage Catalog API.
4//! This library provides type-safe access to Backstage entities and supports
5//! filtering, querying, and retrieving various entity types.
6//!
7//! ## Features
8//!
9//! - **Type-safe entities**: Strongly typed representations of all Backstage entity kinds
10//! - **Async support**: Built on tokio and reqwest for modern async operations
11//! - **Filtering**: Support for complex entity filtering using query parameters
12//! - **Error handling**: Comprehensive error types with detailed error information
13//! - **Authentication**: Bearer token authentication support
14//!
15//! ## Quick Start
16//!
17//! ```rust,no_run
18//! use backstage_client::{BackstageClient, entities::Entity};
19//! use std::collections::HashMap;
20//!
21//! #[tokio::main]
22//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
23//!     let client = BackstageClient::new("https://backstage.example.com", "your-token")?;
24//!
25//!     // Fetch all entities
26//!     let entities = client.fetch_entities::<Entity>(None).await?;
27//!     println!("Found {} entities", entities.len());
28//!
29//!     // Fetch only components
30//!     let mut filters = HashMap::new();
31//!     filters.insert("kind".to_string(), "Component".to_string());
32//!     let components = client.fetch_entities::<Entity>(Some(filters)).await?;
33//!     println!("Found {} components", components.len());
34//!
35//!     Ok(())
36//! }
37//! ```
38//!
39//! ## Supported Entity Types
40//!
41//! - [`Component`](entities::Component) - Software components
42//! - [`ApiEntity`](entities::ApiEntity) - API definitions
43//! - [`ResourceEntity`](entities::ResourceEntity) - Infrastructure resources
44//! - [`SystemEntity`](entities::SystemEntity) - System definitions
45//! - [`GroupEntity`](entities::GroupEntity) - User groups
46//! - [`UserEntity`](entities::UserEntity) - Individual users
47//! - [`LocationEntity`](entities::LocationEntity) - Entity locations
48//! - [`DomainEntity`](entities::DomainEntity) - Business domains
49//! - [`TemplateEntity`](entities::TemplateEntity) - Software templates
50
51pub mod client;
52pub mod entities;
53pub mod error;
54
55// Re-export the main client and commonly used types
56pub use client::BackstageClient;
57pub use error::{ClientError, Result};
58
59// Re-export all entity types for convenience
60pub use entities::{
61    ApiEntity, Component, DomainEntity, Entity, GroupEntity, LocationEntity, Metadata,
62    ResourceEntity, SystemEntity, TemplateEntity, UserEntity,
63};
64
65// Re-export common types
66pub use entities::common::{Relation, Target};
67
68#[cfg(test)]
69mod tests {
70    use super::*;
71    use std::collections::HashMap;
72
73    #[test]
74    fn test_library_exports() {
75        // Test that we can create a client
76        let client_result = BackstageClient::new("https://example.com", "token");
77        assert!(client_result.is_ok());
78
79        // Test that we can create filters
80        let mut filters = HashMap::new();
81        filters.insert("kind".to_string(), "Component".to_string());
82
83        // Test that error types are accessible
84        let _error: ClientError = ClientError::InvalidUrl("test".to_string());
85    }
86}