zinit_client/lib.rs
1//! # Zinit Client
2//!
3//! A Rust client library for interacting with the [Zinit](https://github.com/threefoldtech/zinit) service manager.
4//!
5//! ## Features
6//!
7//! - Complete API coverage for all Zinit operations
8//! - Robust error handling with custom error types
9//! - Automatic reconnection on socket errors
10//! - Retry mechanisms for transient failures
11//! - Async/await support using Tokio
12//! - Strongly typed service states and responses
13//! - Efficient log streaming
14//!
15//! ## Usage
16//!
17//! ```rust,no_run
18//! use zinit_client::{ZinitClient, Result};
19//! use std::collections::HashMap;
20//!
21//! #[tokio::main]
22//! async fn main() -> Result<()> {
23//! // Create a client with default configuration
24//! let client = ZinitClient::new("/var/run/zinit.sock");
25//!
26//! // List all services
27//! let services = client.list().await?;
28//! println!("Services: {:?}", services);
29//!
30//! // Start a service
31//! client.start("nginx").await?;
32//!
33//! // Get service status
34//! let status = client.status("nginx").await?;
35//! println!("Nginx status: {:?}", status);
36//!
37//! Ok(())
38//! }
39//! ```
40//!
41//! ## Configuration
42//!
43//! You can customize the client behavior using `ClientConfig`:
44//!
45//! ```rust,no_run
46//! use zinit_client::{ZinitClient, ClientConfig};
47//! use std::time::Duration;
48//!
49//! let config = ClientConfig {
50//! socket_path: "/var/run/zinit.sock".into(),
51//! connection_timeout: Duration::from_secs(5),
52//! operation_timeout: Duration::from_secs(30),
53//! max_retries: 3,
54//! retry_delay: Duration::from_millis(100),
55//! max_retry_delay: Duration::from_secs(5),
56//! retry_jitter: true,
57//! };
58//!
59//! let client = ZinitClient::with_config(config);
60//! ```
61
62mod client;
63mod connection;
64mod error;
65mod models;
66mod protocol;
67mod retry;
68
69// Re-export public items
70pub use client::{ClientConfig, ZinitClient};
71pub use error::{Result, ZinitError};
72pub use models::{LogEntry, LogStream, ServiceState, ServiceStatus, ServiceTarget};
73pub use retry::RetryStrategy;
74
75// Re-export futures for working with streams
76pub use futures::StreamExt;