busbar_sf_tooling/lib.rs
1//! # sf-tooling
2//!
3//! Salesforce Tooling API client for development and deployment operations.
4//!
5//! ## Features
6//!
7//! - **Apex Operations** - Execute anonymous Apex, query Apex logs
8//! - **Metadata Query** - Query ApexClass, ApexTrigger, and other tooling objects
9//! - **Debug Logs** - Retrieve and manage debug logs
10//! - **Trace Flags** - Manage debug trace flags
11//! - **Test Execution** - Run Apex and Flow tests (async/sync, discovery, v65.0+ unified API)
12//! - **Code Coverage** - Get code coverage information
13//! - **Describe** - Get tooling object metadata
14//!
15//! ## Example
16//!
17//! ```rust,ignore
18//! use sf_tooling::ToolingClient;
19//!
20//! #[tokio::main]
21//! async fn main() -> Result<(), sf_tooling::Error> {
22//! let client = ToolingClient::new(
23//! "https://myorg.my.salesforce.com",
24//! "access_token_here",
25//! )?;
26//!
27//! // Execute anonymous Apex
28//! let result = client
29//! .execute_anonymous("System.debug('Hello World');")
30//! .await?;
31//!
32//! if result.success {
33//! println!("Apex executed successfully");
34//! }
35//!
36//! // Query Apex classes
37//! let classes: Vec<ApexClass> = client
38//! .query_all("SELECT Id, Name, Body FROM ApexClass LIMIT 10")
39//! .await?;
40//!
41//! // Get debug logs
42//! let logs = client.get_apex_logs(Some(10)).await?;
43//!
44//! Ok(())
45//! }
46//! ```
47
48mod client;
49mod error;
50mod types;
51
52pub use client::ToolingClient;
53pub use error::{Error, ErrorKind, Result};
54pub use types::*;
55
56// Re-export busbar-sf-client types that users might need
57pub use busbar_sf_client::{ClientConfig, ClientConfigBuilder, QueryResult};
58
59// Re-export composite and collection types from sf-rest for Tooling API usage
60pub use busbar_sf_rest::{
61 CollectionRequest, CollectionResult, CompositeBatchRequest, CompositeBatchResponse,
62 CompositeBatchSubrequest, CompositeBatchSubresponse, CompositeRequest, CompositeResponse,
63 CompositeSubrequest, CompositeSubresponse, CompositeTreeAttributes, CompositeTreeError,
64 CompositeTreeRecord, CompositeTreeRequest, CompositeTreeResponse, CompositeTreeResult,
65 DescribeGlobalResult, DescribeSObjectResult,
66};