Skip to content

Commit 5c21235

Browse files
committed
feat: 🎸 add initial JSON Rx RPC schema
1 parent 448d099 commit 5c21235

File tree

1 file changed

+109
-0
lines changed

1 file changed

+109
-0
lines changed

src/modules/json-rx.ts

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
import {ModuleType} from "../type";
2+
3+
export const enum CompactMessageType {
4+
RequestData = 0,
5+
RequestComplete = 1,
6+
RequestError = 2,
7+
RequestUnsubscribe = 3,
8+
9+
ResponseData = 4,
10+
ResponseComplete = 5,
11+
ResponseError = 6,
12+
ResponseUnsubscribe = 7,
13+
14+
Notification = 8,
15+
}
16+
17+
18+
export const system = new ModuleType();
19+
const t = system.t;
20+
21+
// export const CompactMsgId = t.num.format('u32').alias('CompactMsgId');
22+
const MethodName = t.str.min(1).max(32).format('ascii').alias('MethodName');
23+
24+
export const NotificationMessage = t.tuple(
25+
t.Key('type', t.con(8)),
26+
t.Key('method', t.Ref<typeof MethodName>('MethodName')),
27+
t.KeyOpt('data', t.any),
28+
).alias('NotificationMessage');
29+
30+
export const RequestDataMessage = t.Or(
31+
t.tuple(
32+
t.con(CompactMessageType.RequestData),
33+
t.num.format('u32'),
34+
t.Ref<typeof MethodName>('MethodName'),
35+
),
36+
t.tuple(
37+
t.con(CompactMessageType.RequestData),
38+
t.num.format('u32'),
39+
t.Ref<typeof MethodName>('MethodName'),
40+
t.any,
41+
),
42+
).options({
43+
discriminator: ['?', ['eq', ['len', ['$', '']], 2], 0, 1],
44+
}).alias('RequestDataMessage');
45+
46+
export const RequestCompleteMessage = t.Or(
47+
t.tuple(
48+
t.con(CompactMessageType.RequestComplete),
49+
t.num.format('u32'),
50+
t.Ref<typeof MethodName>('MethodName'),
51+
),
52+
t.tuple(
53+
t.con(CompactMessageType.RequestComplete),
54+
t.num.format('u32'),
55+
t.Ref<typeof MethodName>('MethodName'),
56+
t.any,
57+
),
58+
).options({
59+
discriminator: ['?', ['eq', ['len', ['$', '']], 2], 0, 1],
60+
}).alias('RequestCompleteMessage');
61+
62+
export const RequestErrorMessage = t.tuple(
63+
t.con(CompactMessageType.RequestError),
64+
t.num.format('u32'),
65+
t.Ref<typeof MethodName>('MethodName'),
66+
t.any,
67+
).alias('RequestErrorMessage');
68+
69+
export const RequestUnsubscribeMessage = t.tuple(
70+
t.con(CompactMessageType.RequestUnsubscribe),
71+
t.num.format('u32'),
72+
).alias('RequestUnsubscribeMessage');
73+
74+
export const ResponseDataMessage = t.tuple(
75+
t.con(CompactMessageType.ResponseData),
76+
t.num.format('u32'),
77+
t.any,
78+
).alias('ResponseDataMessage');
79+
80+
export const ResponseCompleteMessage = t.tuple(
81+
t.con(CompactMessageType.ResponseComplete),
82+
t.num.format('u32'),
83+
t.any,
84+
).alias('ResponseCompleteMessage');
85+
86+
export const ResponseErrorMessage = t.tuple(
87+
t.con(CompactMessageType.ResponseError),
88+
t.num.format('u32'),
89+
t.any,
90+
).alias('ResponseErrorMessage');
91+
92+
export const ResponseUnsubscribeMessage = t.tuple(
93+
t.con(CompactMessageType.ResponseUnsubscribe),
94+
t.num.format('u32'),
95+
).alias('ResponseUnsubscribeMessage');
96+
97+
export const Message = t.Or(
98+
NotificationMessage.type,
99+
RequestDataMessage.type,
100+
RequestCompleteMessage.type,
101+
RequestErrorMessage.type,
102+
RequestUnsubscribeMessage.type,
103+
ResponseDataMessage.type,
104+
ResponseCompleteMessage.type,
105+
ResponseErrorMessage.type,
106+
ResponseUnsubscribeMessage.type,
107+
).alias('Message');
108+
109+
export const messageBatch = t.array(Message).alias('MessageBatch');

0 commit comments

Comments
 (0)