use rship_sdk::{ActionArgs, EmitterArgs, InstanceArgs, SdkClient, TargetArgs};
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct MyActionData {
pub data: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
pub struct MyEmitterType {
pub data: String,
}
pub async fn start_client() {
env_logger::init();
let address = std::env::var("RSHIP_ADDRESS").unwrap_or_else(|_| "dev.rship.io".to_string());
let port = std::env::var("RSHIP_PORT").unwrap_or_else(|_| "5155".to_string());
let url = format!("ws://{}:{}/myko", address, port);
log::info!("Connecting to: {}", url);
let sdk = SdkClient::init();
sdk.set_address(Some(url));
sdk.await_connection().await;
let instance = sdk
.add_instance(InstanceArgs {
name: "Rust SDK Example".into(),
short_id: "rust-sdk-example".into(),
code: "rust-sdk-example".into(),
service_id: "rust-sdk-service".into(),
cluster_id: None,
color: "#FF6B35".into(),
machine_id: "rust-sdk-machine".into(),
message: Some("Hello from Rust SDK!".into()),
status: rship_sdk::InstanceStatus::Available,
})
.await;
let mut target = instance
.add_target(TargetArgs {
name: "SDK Example Target".into(),
short_id: "sdk-example-target".into(),
category: "examples".into(),
parent_targets: None,
})
.await;
target
.add_action(
ActionArgs::<MyActionData>::new("Print Log".into(), "print-log".into()),
|action, data| {
println!("{}", data.data);
},
)
.await;
let emitter = target
.add_emitter(EmitterArgs::<MyEmitterType>::new(
"Example Emitter".into(),
"example-emitter".into(),
))
.await;
let mut counter = 0;
loop {
emitter.pulse(MyEmitterType { data: format!("{}", counter) }).await.expect("Failed to pulse emitter");
counter += 1;
tokio::time::sleep(tokio::time::Duration::from_secs(1)).await;
}
}
#[tokio::main]
async fn main() {
start_client().await;
}