rship-sdk 0.1.2

rship sdk in rust
Documentation
use crate::{client::SdkClient, target::TargetProxy};
use rship_entities::action::Action;
use schemars::{schema_for, JsonSchema};
use serde::de::DeserializeOwned;
use serde_json::json;

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

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

pub struct ActionProxy<T: DeserializeOwned + JsonSchema> {
    pub(crate) target: TargetProxy,
    pub(crate) args: ActionArgs<T>,
    pub(crate) client: SdkClient,
}

impl<T: DeserializeOwned + JsonSchema> ActionProxy<T> {
    pub async fn save(&self) {
        let action = Action::new(
            self.id(),
            self.target.id(),
            self.target.instance.args.service_id.clone(),
            self.args.name.clone(),
            json!(schema_for!(T)),
        );

        if self.client.save_item(&action).await.is_err() {
            println!("Could not save action");
        }
    }

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