actrpc-core 0.1.0

Core types and traits for ActRPC.
Documentation
use crate::{
    action::{ActionDescriptor, ActionKind},
    descriptor::traits::{DescribeOk, DescribeParams},
};
use serde::{Serialize, de::DeserializeOwned};

pub trait ActionSpec {
    type Params: Serialize + DeserializeOwned + DescribeParams;
    type Result: Serialize + DeserializeOwned + DescribeOk;

    const KIND: &'static str;

    fn action_kind() -> ActionKind {
        ActionKind::from(Self::KIND)
    }

    fn descriptor() -> ActionDescriptor {
        ActionDescriptor {
            kind: Self::action_kind(),
            params: <Self::Params as DescribeParams>::describe_params(),
            ok: <Self::Result as DescribeOk>::describe_ok(),
        }
    }
}

#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct NoParams;

#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct NoOk;