Process を書く
引数に 1 を足して返すだけの Process を例にします。関数(または manifest)の名前が Process の型名になります。
use juiz_sdk::prelude::*;
#[juiz_process]fn increment_process(arg1: i64) -> JuizResult<Capsule> { log::trace!("increment_process({:?}) called", arg1); return Ok(jvalue!(arg1 + 1).into());}#[juiz_process] マクロを付けた関数が Process の本体になります。
引数は複数使えて、i64、f64、bool、String、Value、Vec<Value> などを受け取れます。引数の名前がそのままパラメータ名になります。
#include "juiz/juiz.h"
juiz::Value manifest() { return ProcessManifest{"increment_process_cpp"} .add_int_arg("arg1", "test_argument", 1) .into_value();}
std::optional<int64_t> increment_process(juiz::CapsuleMap cm) { auto a = cm.get_int("arg1"); return a + 1;}
PROCESS_FACTORY(manifest, increment_process);C++ では manifest(型名と引数の定義)を自分で書き、PROCESS_FACTORY で公開します。
from juiz import *
@juiz_processdef increment_process(arg1: int = 1) -> int: return arg1 + 1@juiz_process デコレータを付けるだけで Process になります。独自のデータ型は dataclass で定義し、出力では asdict で dict に変換して返します。
単体で動かす
Section titled “単体で動かす”ビルドしたファイルを --process で指定し、-e で実体化して実行します。
juiz --process target/debug/libincrement_process.so -l rust -e -1 -d-lは言語(rust/cpp/python、既定はrust)-eはロードした Process を一つ実体化し、既定の引数で実行-1はロードしたモジュールごとにインスタンスを一つ作成-dは実行後に HTTP ブローカーを立てて待機