policies 0.1.1

Execute stored policies and flows over REST using API keys
Documentation
# `policies`

Execute stored policies and flows over REST or gRPC using API keys only.

This SDK mirrors the narrow scope of the TypeScript package:

- execute policies
- execute flows
- authenticate with `x-api-key`
- choose REST or gRPC transport

It does not support creating, updating, publishing, or administering resources.

## Install

```toml
[dependencies]
policies = "0.1"
serde_json = "1"
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }
```

`Reference::Base` is the default. Use `Reference::Version` only when you want to execute a specific version ID.

## Usage

```rust
use policies::{
    init_bugfixes, ExecutePolicyRequest, ExecutionClient, ExecutionClientConfig, Reference,
    TransportConfig, TransportKind,
};
use serde_json::json;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    init_bugfixes()?;

    let client = ExecutionClient::new(ExecutionClientConfig {
        api_key: std::env::var("POLICY_API_KEY")?,
        transport: TransportConfig {
            kind: TransportKind::Rest,
            base_url: None,
            address: None,
            tls: false,
        },
        timeout: None,
        user_agent: None,
    })?;

    let result = client
        .execute_policy(ExecutePolicyRequest {
            id: "3b7d4b2a-9aa0-4b6d-a1b4-9dcf11ce12ab".into(),
            reference: Reference::Base,
            data: json!({
                "user": { "age": 25 }
            }),
        })
        .await?;

    println!("{}", result.result);
    Ok(())
}
```

## Examples

Call `init_bugfixes()?` during startup to enable Bugfixes logging and the panic hook for the process.

If unset, the SDK defaults REST execution to `https://api.policy2.net/run` and gRPC execution to `shuttle.proxy.rlwy.net:27179`. REST requests append `/policy...` or `/flow...` automatically based on the operation. Set `transport.base_url` or `transport.address` to override them.

Execution reference rules:

- Base policy: `reference: Reference::Base`
- Base flow: `reference: Reference::Base`
- Versioned policy: `reference: Reference::Version`
- Versioned flow: `reference: Reference::Version`
- If a caller uses `Reference::default()`, it resolves to `Reference::Base`

- REST policy execution: [`examples/policy_rest.rs`]./examples/policy_rest.rs
- REST flow execution: [`examples/flow_rest.rs`]./examples/flow_rest.rs
- RPC policy execution: [`examples/policy_rpc.rs`]./examples/policy_rpc.rs
- RPC flow execution: [`examples/flow_rpc.rs`]./examples/flow_rpc.rs