feat: Update SAL crate structure and documentation
Some checks failed
Test Publishing Setup / Test Publishing Setup (pull_request) Has been cancelled

- Reduced the number of SAL crates from 16 to 15.
- Removed redundant core modules from README examples.
- Updated README to reflect the current state of published crates.
- Added `Cargo.toml.bak` to `.gitignore` to prevent accidental commits.
- Improved the clarity and accuracy of the README's installation instructions.
- Updated `publish-all.sh` script to handle existing crate versions and improve dependency management.
This commit is contained in:
Mahmoud-Emad
2025-07-01 09:04:23 +03:00
parent e01b83f12a
commit 23db07b0bd
3 changed files with 157 additions and 64 deletions

103
README.md
View File

@@ -6,10 +6,10 @@ SAL is a comprehensive Rust library designed to provide a unified and simplified
## 🏗️ **Cargo Workspace Structure**
SAL is organized as a **Cargo workspace** with 16 specialized crates:
SAL is organized as a **Cargo workspace** with 15 specialized crates:
- **Root Package**: `sal` - Umbrella crate that re-exports all modules
- **13 Library Crates**: Specialized SAL modules (git, text, os, net, etc.)
- **12 Library Crates**: Core SAL modules (os, process, text, net, git, vault, kubernetes, virt, redisclient, postgresclient, zinit_client, mycelium)
- **1 Binary Crate**: `herodo` - Rhai script execution engine
- **1 Integration Crate**: `rhai` - Rhai scripting integration layer
@@ -31,20 +31,11 @@ SAL is designed to be modular - install only the components you need!
Install only the modules you need:
```bash
# Core system operations
cargo add sal-os sal-process sal-text sal-net
# Currently available packages
cargo add sal-os sal-process sal-text sal-net sal-git sal-vault sal-kubernetes sal-virt
# Database clients
cargo add sal-redisclient sal-postgresclient
# Infrastructure tools
cargo add sal-git sal-vault sal-kubernetes sal-virt
# Service clients
cargo add sal-zinit-client sal-mycelium
# Scripting support
cargo add sal-rhai
# Coming soon (rate limited)
# cargo add sal-redisclient sal-postgresclient sal-zinit-client sal-mycelium sal-rhai
```
### Option 2: Meta-crate with Features
@@ -52,17 +43,13 @@ cargo add sal-rhai
Use the main `sal` crate with specific features:
```bash
# Install specific modules
cargo add sal --features os,process,text
# Coming soon - meta-crate with features (rate limited)
# cargo add sal --features os,process,text
# cargo add sal --features core # os, process, text, net
# cargo add sal --features infrastructure # git, vault, kubernetes, virt
# cargo add sal --features all
# Install feature groups
cargo add sal --features core # os, process, text, net
cargo add sal --features clients # redisclient, postgresclient, zinit_client, mycelium
cargo add sal --features infrastructure # git, vault, kubernetes, virt
cargo add sal --features scripting # rhai
# Install everything
cargo add sal --features all
# For now, use individual crates (see Option 1 above)
```
### Quick Start Examples
@@ -161,15 +148,17 @@ SAL is published as individual crates, allowing you to install only what you nee
**Currently Available on crates.io:**
- ✅ [`sal-os`](https://crates.io/crates/sal-os) - Operating system operations
- ✅ [`sal-process`](https://crates.io/crates/sal-process) - Process management
- ✅ [`sal-text`](https://crates.io/crates/sal-text) - Text processing utilities
- ✅ [`sal-net`](https://crates.io/crates/sal-net) - Network operations
- ✅ [`sal-git`](https://crates.io/crates/sal-git) - Git repository management
- ✅ [`sal-vault`](https://crates.io/crates/sal-vault) - Cryptographic operations
- ✅ [`sal-kubernetes`](https://crates.io/crates/sal-kubernetes) - Kubernetes management
- ✅ [`sal-virt`](https://crates.io/crates/sal-virt) - Virtualization tools
**Publishing Soon** (hit crates.io rate limit):
-`sal-redisclient`, `sal-postgresclient`, `sal-zinit-client`, `sal-mycelium`
-`sal-process`, `sal-virt`, `sal-rhai`
-`sal-rhai`
-`sal` (meta-crate), `herodo` (binary)
**Estimated Timeline**: Remaining packages will be published within 24 hours once the rate limit resets.
@@ -265,42 +254,58 @@ For more examples, check the individual module test directories (e.g., `text/tes
## Using SAL as a Rust Library
Add SAL as a dependency to your `Cargo.toml`:
### Option 1: Individual Crates (Recommended)
Add only the SAL modules you need:
```toml
[dependencies]
sal = "0.1.0" # Or the latest version
sal-os = "0.1.0"
sal-process = "0.1.0"
sal-text = "0.1.0"
```
### Rust Example: Using Redis Client
```rust
use sal::redisclient::{get_global_client, execute_cmd_with_args};
use redis::RedisResult;
use sal_os::fs;
use sal_process::run;
use sal_text::template;
async fn example_redis_interaction() -> RedisResult<()> {
// Get a connection from the global pool
let mut conn = get_global_client().await?.get_async_connection().await?;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// File operations
let files = fs::list_files(".")?;
println!("Found {} files", files.len());
// Set a value
execute_cmd_with_args(&mut conn, "SET", vec!["my_key", "my_value"]).await?;
println!("Set 'my_key' to 'my_value'");
// Process execution
let result = run::command("echo 'Hello SAL!'")?;
println!("Output: {}", result.stdout);
// Get a value
let value: String = execute_cmd_with_args(&mut conn, "GET", vec!["my_key"]).await?;
println!("Retrieved value for 'my_key': {}", value);
// Text templating
let template_str = "Hello {{name}}!";
let mut vars = std::collections::HashMap::new();
vars.insert("name".to_string(), "World".to_string());
let rendered = template::render(template_str, &vars)?;
println!("Rendered: {}", rendered);
Ok(())
}
#[tokio::main]
async fn main() {
if let Err(e) = example_redis_interaction().await {
eprintln!("Redis Error: {}", e);
}
}
```
*(Note: The Redis client API might have evolved; please refer to `src/redisclient/mod.rs` and its documentation for the most current usage.)*
### Option 2: Meta-crate with Features (Coming Soon)
```toml
[dependencies]
sal = { version = "0.1.0", features = ["os", "process", "text"] }
```
```rust
use sal::os::fs;
use sal::process::run;
use sal::text::template;
// Same code as above, but using the meta-crate
```
*(Note: The meta-crate `sal` will be available once all individual packages are published.)*
## 🎯 **Why Choose SAL?**