actrpc_core/action/
spec.rs1use crate::{
2 action::{ActionDescriptor, ActionKind},
3 descriptor::traits::{DescribeOk, DescribeParams},
4};
5use serde::{Serialize, de::DeserializeOwned};
6
7pub trait ActionSpec {
8 type Params: Serialize + DeserializeOwned + DescribeParams;
9 type Result: Serialize + DeserializeOwned + DescribeOk;
10
11 const KIND: &'static str;
12
13 fn action_kind() -> ActionKind {
14 ActionKind::from(Self::KIND)
15 }
16
17 fn descriptor() -> ActionDescriptor {
18 ActionDescriptor {
19 kind: Self::action_kind(),
20 params: <Self::Params as DescribeParams>::describe_params(),
21 ok: <Self::Result as DescribeOk>::describe_ok(),
22 }
23 }
24}
25
26#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
27pub struct NoParams;
28
29#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
30pub struct NoOk;