Skip to main content

actrpc_core/action/
spec.rs

1use 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;