ansible-rs 1.1.0

A Rust wrapper library for Ansible command-line tools (Linux/Unix only)
Documentation
//! 异步支持模块
//!
//! 本模块提供 ansible-rs 的异步版本,允许在异步环境中使用 Ansible 功能。
//! 采用双重 API + 转换特性的设计,保持同步 API 不变的同时提供完整的异步支持。
//!
//! # 设计原则
//!
//! 1. **向后兼容**: 保持现有同步 API 完全不变
//! 2. **独立异步 API**: 提供完整的异步版本,不依赖同步实现
//! 3. **转换特性**: 支持同步和异步类型之间的转换
//! 4. **特性标志控制**: 用户可选择是否启用异步功能
//! 5. **性能优化**: 异步版本直接使用 tokio,避免线程池开销
//!
//! # 使用方式
//!
//! ## 启用异步功能
//!
//! ```toml
//! [dependencies]
//! ansible = { version = "1.0", features = ["async"] }
//! ```
//!
//! ## 基本异步使用
//!
//! ```rust,no_run
//! use ansible::{AsyncAnsible, Module};
//!
//! #[tokio::main]
//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
//!     let mut ansible = AsyncAnsible::new();
//!     ansible.add_host("localhost");
//!
//!     let result = ansible.ping().await?;
//!     println!("Ping result: {}", result);
//!     Ok(())
//! }
//! ```
//!
//! ## 同步到异步转换
//!
//! ```rust,no_run
//! use ansible::{Ansible, IntoAsync};
//!
//! #[tokio::main]
//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
//!     let sync_ansible = Ansible::default();
//!     let async_ansible = sync_ansible.into_async();
//!
//!     let result = async_ansible.ping().await?;
//!     println!("Result: {}", result);
//!     Ok(())
//! }
//! ```

#[cfg(feature = "async")]
pub mod async_ansible;

#[cfg(feature = "async")]
pub mod async_playbook;

#[cfg(feature = "async")]
pub mod async_vault;

#[cfg(feature = "async")]
pub mod async_config;

#[cfg(feature = "async")]
pub mod async_inventory;

// 重新导出异步类型
#[cfg(feature = "async")]
pub use async_ansible::AsyncAnsible;

#[cfg(feature = "async")]
pub use async_playbook::{AsyncPlaybook, AsyncPlay};

#[cfg(feature = "async")]
pub use async_vault::AsyncAnsibleVault;

#[cfg(feature = "async")]
pub use async_config::AsyncAnsibleConfig;

#[cfg(feature = "async")]
pub use async_inventory::AsyncAnsibleInventory;

/// 异步结果类型
#[cfg(feature = "async")]
pub type AsyncResult<T> = Result<T, crate::AnsibleError>;

/// 异步特性,为同步类型提供异步方法
#[cfg(feature = "async")]
pub trait AsyncExecute {
    /// 异步执行命令
    async fn execute_async(&self) -> AsyncResult<String>;
}

/// 异步转换特性,将同步类型转换为异步类型
#[cfg(feature = "async")]
pub trait IntoAsync<T> {
    /// 转换为异步版本
    fn into_async(self) -> T;
}

/// 从异步转换特性,将异步类型转换为同步类型
#[cfg(feature = "async")]
pub trait FromAsync<T> {
    /// 从异步版本转换
    fn from_async(async_type: T) -> Self;
}