[package]
name = "monetize-cloud"
description = "Cloud trait and provider implementations"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
repository.workspace = true
license.workspace = true
authors.workspace = true
publish.workspace = true
# THE SPLIT (2026-09-05): this crate is the OPEN half — the trait, the
# spend guards, the pool ledger, the registration seam (`factory`), and the
# clouds nobody needs an account for: `server` (the iron this box already has)
# and `sandbox` (fake iron at declared prices). upcloud and scaleway live in the
# private `vetra-automation/monetize-impl` (crate `monetize-cloud-impl`), depend
# on this crate, and register themselves through `factory::register` — the
# vetra build also re-registers `sandbox` with prices MEASURED off UpCloud's
# list, through `sandbox::PriceList`.
[features]
# Default: the trait, and the one provider nobody needs an account for — the
# iron this box already has. Every paid provider is a feature a deployment asks for.
default = ["server"]
# **The free cloud: the iron this box already has.** Answers `OnHand` from a
# declared pool walled by the product's own measurement, never buys, has no
# credential. See `server`.
server = []
# **The rehearsal cloud: fake iron at real prices.** Provisions nothing, holds
# nothing that can create/attach/delete, prices off a declared table — or off a
# real provider's list when a build that links one hands it a `PriceList`.
# NEVER in `default` — a build that contains it is a build someone asked for.
sandbox = []
[dependencies]
serde.workspace = true
monetize-pay = { path = "../monetize-pay" }
# The `Product` seam: the `server` cloud asks the product what its disk can
# still serve before it grants (rule 5 — the product counts). serde-only, tiny.
monetize-product = { path = "../monetize-product" }
# Not optional: `cap` is always available (it is a guard, not a provider) and
# the spend total it keeps across restarts is one small JSON file.
serde_json.workspace = true
[dev-dependencies]
serde_json.workspace = true