[package] name = "sal" version = "0.1.0" edition = "2021" authors = ["PlanetFirst "] description = "System Abstraction Layer - A library for easy interaction with operating system features" repository = "https://git.threefold.info/herocode/sal" license = "Apache-2.0" keywords = ["system", "os", "abstraction", "platform", "filesystem"] categories = ["os", "filesystem", "api-bindings"] readme = "README.md" [workspace] members = [ "packages/clients/myceliumclient", "packages/clients/postgresclient", "packages/clients/redisclient", "packages/clients/zinitclient", "packages/core/net", "packages/core/text", "packages/crypt/vault", "packages/system/git", "packages/system/kubernetes", "packages/system/os", "packages/system/process", "packages/system/virt", "rhai", "herodo", "packages/clients/hetznerclient", ] resolver = "2" [workspace.metadata] # Workspace-level metadata rust-version = "1.70.0" [workspace.dependencies] # Core shared dependencies with consistent versions anyhow = "1.0.98" base64 = "0.22.1" dirs = "6.0.0" env_logger = "0.11.8" futures = "0.3.30" glob = "0.3.1" lazy_static = "1.4.0" libc = "0.2" log = "0.4" once_cell = "1.18.0" rand = "0.8.5" regex = "1.8.1" reqwest = { version = "0.12.15", features = ["json", "blocking"] } rhai = { version = "1.12.0", features = ["sync"] } serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" tempfile = "3.5" thiserror = "2.0.12" tokio = { version = "1.45.0", features = ["full"] } url = "2.4" uuid = { version = "1.16.0", features = ["v4"] } # Database dependencies postgres = "0.19.10" r2d2_postgres = "0.18.2" redis = "0.31.0" tokio-postgres = "0.7.13" # Crypto dependencies chacha20poly1305 = "0.10.1" k256 = { version = "0.13.4", features = ["ecdsa", "ecdh"] } sha2 = "0.10.7" hex = "0.4" bincode = { version = "2.0.1", features = ["serde"] } pbkdf2 = "0.12.2" getrandom = { version = "0.3.3", features = ["wasm_js"] } tera = "1.19.0" # Ethereum dependencies ethers = { version = "2.0.7", features = ["legacy"] } # Platform-specific dependencies nix = "0.30.1" windows = { version = "0.61.1", features = [ "Win32_Foundation", "Win32_System_Threading", "Win32_Storage_FileSystem", ] } # Specialized dependencies zinit-client = "0.4.0" urlencoding = "2.1.3" tokio-test = "0.4.4" kube = { version = "0.95.0", features = ["client", "config", "derive"] } k8s-openapi = { version = "0.23.0", features = ["latest"] } tokio-retry = "0.3.0" governor = "0.6.3" tower = { version = "0.5.2", features = ["timeout", "limit"] } serde_yaml = "0.9" postgres-types = "0.2.5" r2d2 = "0.8.10" # SAL dependencies sal-git = { path = "packages/system/git" } sal-kubernetes = { path = "packages/system/kubernetes" } sal-redisclient = { path = "packages/clients/redisclient" } sal-mycelium = { path = "packages/clients/myceliumclient" } sal-hetzner = { path = "packages/clients/hetznerclient" } sal-text = { path = "packages/core/text" } sal-os = { path = "packages/system/os" } sal-net = { path = "packages/core/net" } sal-zinit-client = { path = "packages/clients/zinitclient" } sal-process = { path = "packages/system/process" } sal-virt = { path = "packages/system/virt" } sal-postgresclient = { path = "packages/clients/postgresclient" } sal-vault = { path = "packages/crypt/vault" } sal-rhai = { path = "rhai" } sal-service-manager = { path = "_archive/service_manager" } [dependencies] thiserror = { workspace = true } tokio = { workspace = true } # Optional dependencies - users can choose which modules to include sal-git = { workspace = true, optional = true } sal-kubernetes = { workspace = true, optional = true } sal-redisclient = { workspace = true, optional = true } sal-mycelium = { workspace = true, optional = true } sal-hetzner = { workspace = true, optional = true } sal-text = { workspace = true, optional = true } sal-os = { workspace = true, optional = true } sal-net = { workspace = true, optional = true } sal-zinit-client = { workspace = true, optional = true } sal-process = { workspace = true, optional = true } sal-virt = { workspace = true, optional = true } sal-postgresclient = { workspace = true, optional = true } sal-vault = { workspace = true, optional = true } sal-rhai = { workspace = true, optional = true } sal-service-manager = { workspace = true, optional = true } [features] default = [] # Individual module features git = ["dep:sal-git"] kubernetes = ["dep:sal-kubernetes"] redisclient = ["dep:sal-redisclient"] mycelium = ["dep:sal-mycelium"] hetzner = ["dep:sal-hetzner"] text = ["dep:sal-text"] os = ["dep:sal-os"] net = ["dep:sal-net"] zinit_client = ["dep:sal-zinit-client"] process = ["dep:sal-process"] virt = ["dep:sal-virt"] postgresclient = ["dep:sal-postgresclient"] vault = ["dep:sal-vault"] rhai = ["dep:sal-rhai"] # service_manager is removed as it's not a direct member anymore # Convenience feature groups core = ["os", "process", "text", "net"] clients = ["redisclient", "postgresclient", "zinit_client", "mycelium", "hetzner"] infrastructure = ["git", "vault", "kubernetes", "virt"] scripting = ["rhai"] all = [ "git", "kubernetes", "redisclient", "mycelium", "hetzner", "text", "os", "net", "zinit_client", "process", "virt", "postgresclient", "vault", "rhai", ] # Examples [[example]] name = "postgres_cluster" path = "examples/kubernetes/clusters/postgres.rs" required-features = ["kubernetes"] [[example]] name = "redis_cluster" path = "examples/kubernetes/clusters/redis.rs" required-features = ["kubernetes"] [[example]] name = "generic_cluster" path = "examples/kubernetes/clusters/generic.rs" required-features = ["kubernetes"]