From c442050d374ebfee4c679fdd3ff6a3de2d54331e Mon Sep 17 00:00:00 2001 From: Simon Hornby Date: Mon, 16 Mar 2026 09:56:00 +0200 Subject: [PATCH] chore: move to subcrate structure --- .github/workflows/ci-matrix.yml | 12 +- .github/workflows/publish.yaml | 18 +-- Cargo.toml | 112 ++---------------- crates/unleash-api-client/Cargo.toml | 104 ++++++++++++++++ .../unleash-api-client/benches}/is_enabled.rs | 0 .../unleash-api-client/examples}/async-std.rs | 0 .../unleash-api-client/examples}/threads.rs | 0 .../unleash-api-client/examples}/tokio.rs | 0 {src => crates/unleash-api-client/src}/api.rs | 0 .../src}/bin/dump-features.rs | 0 .../unleash-api-client/src}/client.rs | 0 .../unleash-api-client/src}/config.rs | 0 .../unleash-api-client/src}/context.rs | 0 .../unleash-api-client/src}/http.rs | 0 .../unleash-api-client/src}/http/reqwest.rs | 0 .../src}/http/reqwest_11.rs | 0 .../unleash-api-client/src}/http/shim.rs | 0 {src => crates/unleash-api-client/src}/lib.rs | 0 .../unleash-api-client/src}/strategy.rs | 0 .../unleash-api-client/src}/version.rs | 0 .../unleash-api-client/tests}/clientspec.rs | 0 .../unleash-api-client/tests}/functional.rs | 0 22 files changed, 124 insertions(+), 122 deletions(-) create mode 100644 crates/unleash-api-client/Cargo.toml rename {benches => crates/unleash-api-client/benches}/is_enabled.rs (100%) rename {examples => crates/unleash-api-client/examples}/async-std.rs (100%) rename {examples => crates/unleash-api-client/examples}/threads.rs (100%) rename {examples => crates/unleash-api-client/examples}/tokio.rs (100%) rename {src => crates/unleash-api-client/src}/api.rs (100%) rename {src => crates/unleash-api-client/src}/bin/dump-features.rs (100%) rename {src => crates/unleash-api-client/src}/client.rs (100%) rename {src => crates/unleash-api-client/src}/config.rs (100%) rename {src => crates/unleash-api-client/src}/context.rs (100%) rename {src => crates/unleash-api-client/src}/http.rs (100%) rename {src => crates/unleash-api-client/src}/http/reqwest.rs (100%) rename {src => crates/unleash-api-client/src}/http/reqwest_11.rs (100%) rename {src => crates/unleash-api-client/src}/http/shim.rs (100%) rename {src => crates/unleash-api-client/src}/lib.rs (100%) rename {src => crates/unleash-api-client/src}/strategy.rs (100%) rename {src => crates/unleash-api-client/src}/version.rs (100%) rename {tests => crates/unleash-api-client/tests}/clientspec.rs (100%) rename {tests => crates/unleash-api-client/tests}/functional.rs (100%) diff --git a/.github/workflows/ci-matrix.yml b/.github/workflows/ci-matrix.yml index a14e674..20caa1a 100644 --- a/.github/workflows/ci-matrix.yml +++ b/.github/workflows/ci-matrix.yml @@ -29,12 +29,12 @@ jobs: - uses: actions-rs/cargo@v1 with: command: build - args: --no-default-features --features async-std,strict,${{ matrix.features }} + args: -p unleash-api-client --no-default-features --features async-std,strict,${{ matrix.features }} - uses: actions-rs/cargo@v1 with: command: test - args: --no-default-features --features async-std,strict,${{ matrix.features }} + args: -p unleash-api-client --no-default-features --features async-std,strict,${{ matrix.features }} clippy: runs-on: ubuntu-latest @@ -58,13 +58,13 @@ jobs: - uses: actions-rs/cargo@v1 with: command: build - args: --features strict,async-std,reqwest-client,reqwest-client-rustls,reqwest-client-11,reqwest-client-11-rustls --all-targets + args: -p unleash-api-client --features strict,async-std,reqwest-client,reqwest-client-rustls,reqwest-client-11,reqwest-client-11-rustls --all-targets - uses: actions-rs/cargo@v1 # We test with approximately all-features to ensure that that does build with: command: test - args: --features strict,async-std,reqwest-client,reqwest-client-rustls,reqwest-client-11,reqwest-client-11-rustls --all-targets + args: -p unleash-api-client --features strict,async-std,reqwest-client,reqwest-client-rustls,reqwest-client-11,reqwest-client-11-rustls --all-targets - uses: actions-rs/cargo@v1 with: @@ -74,7 +74,7 @@ jobs: - uses: actions-rs/cargo@v1 with: command: clippy - args: --features strict,async-std,reqwest-client,reqwest-client-rustls,reqwest-client-11,reqwest-client-11-rustls --all-targets -- -D warnings + args: -p unleash-api-client --features strict,async-std,reqwest-client,reqwest-client-rustls,reqwest-client-11,reqwest-client-11-rustls --all-targets -- -D warnings msrv: runs-on: ubuntu-latest @@ -100,4 +100,4 @@ jobs: - uses: actions-rs/cargo@v1 with: command: build - args: --release --no-default-features + args: --release --no-default-features \ No newline at end of file diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index 1403d37..997576f 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -7,19 +7,13 @@ on: jobs: publish: runs-on: ubuntu-latest - - name: "publish" - - # Reference your environment variables + name: publish environment: cargo steps: - - uses: actions/checkout@master - - - name: Run publish-action - uses: tu6ge/publish-action@v0.4.6 + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + - name: Publish unleash-api-client + run: cargo publish --manifest-path crates/unleash-api-client/Cargo.toml env: - # This can help you tagging the github repository - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # This can help you publish to crates.io - CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} + CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} \ No newline at end of file diff --git a/Cargo.toml b/Cargo.toml index 1748ee3..a140f55 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,104 +1,8 @@ -[package] -name = "unleash-api-client" -version = "0.15.0" -authors = ["Robert Collins "] -edition = "2021" -rust-version = "1.83" -description = "An API client for https://www.getunleash.io/" -readme = "README.md" -homepage = "https://github.com/Unleash/unleash-rust-sdk/" -repository = "https://github.com/Unleash/unleash-rust-sdk/" -license = "Apache-2.0" -keywords = ["continualdeployment"] -categories = ["api-bindings", "web-programming"] -default-run = "dump-features" - -[lib] -bench = false - -[[bin]] -bench = false -name = "dump-features" -path = "src/bin/dump-features.rs" -required-features = ["async-std", "reqwest-client"] - -[[bench]] -harness = false -name = "is_enabled" - -[dependencies] -anyhow = "1.0.44" -arc-swap = "1.4.0" -async-std = { version = "1.13.1", optional = true } -async-trait = "0.1.56" -cfg-if = "1.0.0" -enum-map = "2.7.3" -futures-timer = "3.0.2" -hostname = "0.4.1" -ipnet = "2.3.1" -log = "0.4.14" -murmur3 = "0.5.1" -rand = "0.9.1" -rustversion = "1.0.7" -semver = { version = "1.0.26", features = ["serde"] } -serde_json = "1.0.68" -serde_plain = "1.0.0" -unleash-types = "=0.15.22" -unleash-yggdrasil = { version = "0.21.0", features = ["hostname"] } -uuid = { version = "1.11.0", features = ["v4"] } - -[dependencies.chrono] -version = "0.4.41" -default-features = false -features = ["clock", "serde"] - -[dependencies.reqwest] -version = "0.12" -default-features = false -features = ["json"] -optional = true - -[dependencies.reqwest-11] -version = "0.11" -default-features = false -features = ["json"] -optional = true -package = "reqwest" - -[dependencies.serde] -version = "1.0.219" -features = ["derive"] - -[dev-dependencies] -criterion = "0.6.0" # Remember to update audit.toml -futures = "0.3.17" -maplit = "1.0.2" -num_cpus = "1.13.0" -regex = "1.9.6" -simple_logger = "5.0.0" - -[dev-dependencies.tokio] -version = "1.12.0" -features = ["macros", "rt-multi-thread", "time"] - -[badges] -[badges.maintenance] -status = "experimental" - -[features] -# Enable async-std for tests and dump-features -async-std = ["dep:async-std"] -# Enable backtrace feature in anyhow -backtrace = ["anyhow/backtrace"] -# Force clients to make a choice about which client to use -default = [] -# Enable the functional test suite -functional = [] -# Built in HTTP clients -reqwest-client = ["reqwest", "reqwest?/default-tls"] -reqwest-client-11 = ["reqwest-11", "reqwest-11?/default-tls"] -# For users that don't want to depend on OpenSSL. -reqwest-client-11-rustls = ["reqwest-11", "reqwest-11?/rustls-tls"] -reqwest-client-rustls = ["reqwest", "reqwest?/rustls-tls"] -# To error if an unsupported API feature is present -strict = [] +[workspace] +resolver = "2" +members = [ + "crates/unleash-api-client", +] +default-members = [ + "crates/unleash-api-client", +] \ No newline at end of file diff --git a/crates/unleash-api-client/Cargo.toml b/crates/unleash-api-client/Cargo.toml new file mode 100644 index 0000000..1748ee3 --- /dev/null +++ b/crates/unleash-api-client/Cargo.toml @@ -0,0 +1,104 @@ +[package] +name = "unleash-api-client" +version = "0.15.0" +authors = ["Robert Collins "] +edition = "2021" +rust-version = "1.83" +description = "An API client for https://www.getunleash.io/" +readme = "README.md" +homepage = "https://github.com/Unleash/unleash-rust-sdk/" +repository = "https://github.com/Unleash/unleash-rust-sdk/" +license = "Apache-2.0" +keywords = ["continualdeployment"] +categories = ["api-bindings", "web-programming"] +default-run = "dump-features" + +[lib] +bench = false + +[[bin]] +bench = false +name = "dump-features" +path = "src/bin/dump-features.rs" +required-features = ["async-std", "reqwest-client"] + +[[bench]] +harness = false +name = "is_enabled" + +[dependencies] +anyhow = "1.0.44" +arc-swap = "1.4.0" +async-std = { version = "1.13.1", optional = true } +async-trait = "0.1.56" +cfg-if = "1.0.0" +enum-map = "2.7.3" +futures-timer = "3.0.2" +hostname = "0.4.1" +ipnet = "2.3.1" +log = "0.4.14" +murmur3 = "0.5.1" +rand = "0.9.1" +rustversion = "1.0.7" +semver = { version = "1.0.26", features = ["serde"] } +serde_json = "1.0.68" +serde_plain = "1.0.0" +unleash-types = "=0.15.22" +unleash-yggdrasil = { version = "0.21.0", features = ["hostname"] } +uuid = { version = "1.11.0", features = ["v4"] } + +[dependencies.chrono] +version = "0.4.41" +default-features = false +features = ["clock", "serde"] + +[dependencies.reqwest] +version = "0.12" +default-features = false +features = ["json"] +optional = true + +[dependencies.reqwest-11] +version = "0.11" +default-features = false +features = ["json"] +optional = true +package = "reqwest" + +[dependencies.serde] +version = "1.0.219" +features = ["derive"] + +[dev-dependencies] +criterion = "0.6.0" # Remember to update audit.toml +futures = "0.3.17" +maplit = "1.0.2" +num_cpus = "1.13.0" +regex = "1.9.6" +simple_logger = "5.0.0" + +[dev-dependencies.tokio] +version = "1.12.0" +features = ["macros", "rt-multi-thread", "time"] + +[badges] +[badges.maintenance] +status = "experimental" + +[features] +# Enable async-std for tests and dump-features +async-std = ["dep:async-std"] +# Enable backtrace feature in anyhow +backtrace = ["anyhow/backtrace"] +# Force clients to make a choice about which client to use +default = [] +# Enable the functional test suite +functional = [] +# Built in HTTP clients +reqwest-client = ["reqwest", "reqwest?/default-tls"] +reqwest-client-11 = ["reqwest-11", "reqwest-11?/default-tls"] +# For users that don't want to depend on OpenSSL. +reqwest-client-11-rustls = ["reqwest-11", "reqwest-11?/rustls-tls"] +reqwest-client-rustls = ["reqwest", "reqwest?/rustls-tls"] +# To error if an unsupported API feature is present +strict = [] diff --git a/benches/is_enabled.rs b/crates/unleash-api-client/benches/is_enabled.rs similarity index 100% rename from benches/is_enabled.rs rename to crates/unleash-api-client/benches/is_enabled.rs diff --git a/examples/async-std.rs b/crates/unleash-api-client/examples/async-std.rs similarity index 100% rename from examples/async-std.rs rename to crates/unleash-api-client/examples/async-std.rs diff --git a/examples/threads.rs b/crates/unleash-api-client/examples/threads.rs similarity index 100% rename from examples/threads.rs rename to crates/unleash-api-client/examples/threads.rs diff --git a/examples/tokio.rs b/crates/unleash-api-client/examples/tokio.rs similarity index 100% rename from examples/tokio.rs rename to crates/unleash-api-client/examples/tokio.rs diff --git a/src/api.rs b/crates/unleash-api-client/src/api.rs similarity index 100% rename from src/api.rs rename to crates/unleash-api-client/src/api.rs diff --git a/src/bin/dump-features.rs b/crates/unleash-api-client/src/bin/dump-features.rs similarity index 100% rename from src/bin/dump-features.rs rename to crates/unleash-api-client/src/bin/dump-features.rs diff --git a/src/client.rs b/crates/unleash-api-client/src/client.rs similarity index 100% rename from src/client.rs rename to crates/unleash-api-client/src/client.rs diff --git a/src/config.rs b/crates/unleash-api-client/src/config.rs similarity index 100% rename from src/config.rs rename to crates/unleash-api-client/src/config.rs diff --git a/src/context.rs b/crates/unleash-api-client/src/context.rs similarity index 100% rename from src/context.rs rename to crates/unleash-api-client/src/context.rs diff --git a/src/http.rs b/crates/unleash-api-client/src/http.rs similarity index 100% rename from src/http.rs rename to crates/unleash-api-client/src/http.rs diff --git a/src/http/reqwest.rs b/crates/unleash-api-client/src/http/reqwest.rs similarity index 100% rename from src/http/reqwest.rs rename to crates/unleash-api-client/src/http/reqwest.rs diff --git a/src/http/reqwest_11.rs b/crates/unleash-api-client/src/http/reqwest_11.rs similarity index 100% rename from src/http/reqwest_11.rs rename to crates/unleash-api-client/src/http/reqwest_11.rs diff --git a/src/http/shim.rs b/crates/unleash-api-client/src/http/shim.rs similarity index 100% rename from src/http/shim.rs rename to crates/unleash-api-client/src/http/shim.rs diff --git a/src/lib.rs b/crates/unleash-api-client/src/lib.rs similarity index 100% rename from src/lib.rs rename to crates/unleash-api-client/src/lib.rs diff --git a/src/strategy.rs b/crates/unleash-api-client/src/strategy.rs similarity index 100% rename from src/strategy.rs rename to crates/unleash-api-client/src/strategy.rs diff --git a/src/version.rs b/crates/unleash-api-client/src/version.rs similarity index 100% rename from src/version.rs rename to crates/unleash-api-client/src/version.rs diff --git a/tests/clientspec.rs b/crates/unleash-api-client/tests/clientspec.rs similarity index 100% rename from tests/clientspec.rs rename to crates/unleash-api-client/tests/clientspec.rs diff --git a/tests/functional.rs b/crates/unleash-api-client/tests/functional.rs similarity index 100% rename from tests/functional.rs rename to crates/unleash-api-client/tests/functional.rs