xidl_parser/jsonrpc_hir/
model.rs1use serde::{Deserialize, Serialize};
2
3use crate::hir;
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
6pub struct JsonRpcHirDocument {
7 pub spec: hir::Specification,
8 pub interfaces: Vec<JsonRpcInterface>,
9}
10
11#[derive(Debug, Clone, Serialize, Deserialize)]
12pub struct JsonRpcInterface {
13 pub ident: String,
14 pub module_path: Vec<String>,
15 pub annotations: Vec<hir::Annotation>,
16 pub methods: Vec<JsonRpcMethod>,
17 pub watch_methods: Vec<JsonRpcWatchMethod>,
18}
19
20#[derive(Debug, Clone, Serialize, Deserialize)]
21pub struct JsonRpcMethod {
22 pub source: JsonRpcMethodSource,
23 pub kind: JsonRpcMethodKind,
24 pub name: String,
25 pub rpc_name: String,
26 pub annotations: Vec<hir::Annotation>,
27 pub request_fields: Vec<JsonRpcField>,
28 pub response_fields: Vec<JsonRpcField>,
29 pub response_kind: JsonRpcResponseKind,
30 pub stream_item: Option<hir::TypeSpec>,
31}
32
33#[derive(Debug, Clone, Serialize, Deserialize)]
34pub struct JsonRpcWatchMethod {
35 pub getter_name: String,
36 pub item_ty: hir::TypeSpec,
37 pub stream_rpc_name: String,
38}
39
40#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
41pub enum JsonRpcMethodSource {
42 Operation,
43 AttributeGet,
44 AttributeSet,
45 AttributeStreamSource,
46}
47
48#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
49pub enum JsonRpcMethodKind {
50 Unary,
51 ServerStream,
52 ClientStream,
53 BidiStream,
54 StreamSource,
55}
56
57#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
58pub enum JsonRpcResponseKind {
59 Empty,
60 SingleReturn,
61 SingleOutput,
62 MultiOutput,
63}
64
65#[derive(Debug, Clone, Serialize, Deserialize)]
66pub struct JsonRpcField {
67 pub name: String,
68 pub wire_name: String,
69 pub ty: hir::TypeSpec,
70 pub annotations: Vec<hir::Annotation>,
71 pub required: bool,
72 pub source: JsonRpcFieldSource,
73}
74
75#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
76pub enum JsonRpcFieldSource {
77 Return,
78 Param,
79}