rship-sdk 0.1.5

rship sdk in rust
Documentation
use crate::{client::SdkClient, target::TargetProxy};
use rship_entities::emitter::Emitter;
use schemars::{schema_for, JsonSchema};
use serde::Serialize;
use serde_json::json;

#[derive(Clone)]
pub struct EmitterArgs<T: JsonSchema + Clone> {
    phantom: std::marker::PhantomData<T>,
    pub name: String,
    pub short_id: String,
}

impl<T: JsonSchema + Clone> EmitterArgs<T> {
    pub fn new(name: String, short_id: String) -> Self {
        Self {
            phantom: std::marker::PhantomData,
            name,
            short_id,
        }
    }
}

pub struct EmitterProxy<T: JsonSchema + Serialize + Clone> {
    pub(crate) target: TargetProxy,
    pub(crate) args: EmitterArgs<T>,
    pub(crate) client: SdkClient,
}

impl<T: JsonSchema + Serialize + Clone> EmitterProxy<T> {
    pub async fn save(&self) {
        let emitter = Emitter::new(
            self.id(),
            self.args.name.clone(),
            self.target.id(),
            self.target.instance.args.service_id.clone(),
            json!(schema_for!(T)),
        );

        if let Err(e) = self.client.save_item(&emitter).await {
            println!("Could not save emitter: {}", e);
        }
    }

    pub fn id(&self) -> String {
        format!(
            "{}:{}:{}",
            self.target.instance.args.service_id, self.target.args.short_id, self.args.short_id
        )
    }

    pub async fn pulse(&self, data: T) -> Result<(), String> {
        self.client
            .pulse_emitter(
                self.target.instance.args.service_id.clone(),
                self.target.args.short_id.clone(),
                self.args.short_id.clone(),
                data,
            )
            .await
    }
}