acts-channel 0.8.0

acts client channel for acts-server
Documentation
# acts-channel


[![Build](https://github.com/yaojianpin/acts-channel/actions/workflows/build.yml/badge.svg)](https://github.com/yaojianpin/acts-channel/actions?workflow=build)

provides an acts client channel for workflow engine server [`acts-server`](https://github.com/yaojianpin/acts-server)

The crate is called acts-channel and you can depend on it via cargo:

```toml
[dependencies]
acts-channel = "*"
```

If you want to use the git version:

```toml
[dependencies]
acts-channel = { git = "https://github.com/yaojianpin/acts-channel.git" }
```

# Usage


Before connecting, please download [`acts-server`](https://github.com/yaojianpin/acts-server) and start it

## Message


Listening to the message from [`acts-server`](https://github.com/yaojianpin/acts-server)

```rust,ignore
use acts_channel::{ActsChannel, ActsOptions};

let url = format!("http://{hostname}:{port}");

// connect to server
let mut client = ActsChannel::connect(&url).await?;

// subscribe the messages
client
    .subscribe(
        "client-1",
        move |message| {
            println!("{message:?}");
        },
        &ActsOptions::default(),
    )
    .await;

```

## Action


Executes action to interact with acts-server, such as `deploy`, `start`, `ack`, `send`, etc. For more information, please see [`acts-server`](https://github.com/yaojianpin/acts-server)

### Publish


```rust,ignore
let yml = r"
    id: test
    name: model test
    steps:
        - name: step 1
    ";
let resp = client
    .deploy(yml, Some("custom_model_id")).await?;
assert_eq!(resp.data.unwrap(), true);
```

### Start


```rust,ignore
let mut vars = Vars::new();
vars.set("var1", true);
client
    .submit("pid", "tid", vars).await?;

```

### do act


```rust,ignore
    // set some other vars
    let vars = Vars::new();

    // combine with pid and tid
    let options = Vars::new().with("pid", pid).with("tid", tid).extend(&vars);

    // name should be one of complete, submit, back, cancel, error, abort, push and remove
    let name = "complete";
    client
        .send::<()>(name, options)
        .await
        .map_err(|err| err.message().to_string())?;
```

### Ack a message


```rust,ignore
    let resp = client
        // id is message id
        .ack(id)
        .await
        .map_err(|err| err.message().to_string())?;
```