mirror of
https://github.com/fluencelabs/aqua-playground
synced 2025-03-17 03:21:00 +00:00
Extend multireturn example
This commit is contained in:
parent
cc595d3a93
commit
c8519bbb16
aqua/examples
src
@ -4,6 +4,10 @@ service GetStr("multiret-test"):
|
|||||||
service GetNum("multiret-num"):
|
service GetNum("multiret-num"):
|
||||||
retNum: -> u8
|
retNum: -> u8
|
||||||
|
|
||||||
|
service GetMulti("multiret-multiret"):
|
||||||
|
ret: -> string, u8
|
||||||
|
retOpt: -> string, ?u8, ?u8
|
||||||
|
|
||||||
const SOME_NUM = 5
|
const SOME_NUM = 5
|
||||||
const SOME_STR = "some-str"
|
const SOME_STR = "some-str"
|
||||||
|
|
||||||
@ -12,9 +16,11 @@ func tupleFunc() -> string, u8:
|
|||||||
n <- GetNum.retNum()
|
n <- GetNum.retNum()
|
||||||
<- str, n
|
<- str, n
|
||||||
|
|
||||||
func multiReturnFunc(somethingToReturn: []u8, smthOption: ?string) -> []string, u8, string, []u8, ?string, u8 :
|
func multiReturnFunc(somethingToReturn: []u8, smthOption: ?string) -> []string, u8, string, []u8, ?string, u8, string, u8, string, ?u8, ?u8:
|
||||||
res: *string
|
res: *string
|
||||||
res <- GetStr.retStr(SOME_STR)
|
res <- GetStr.retStr(SOME_STR)
|
||||||
res <- GetStr.retStr("random-str")
|
res <- GetStr.retStr("random-str")
|
||||||
|
m1, m2 <- GetMulti.ret()
|
||||||
|
mo1, mo2, mo3 <- GetMulti.retOpt()
|
||||||
res, tNum <- tupleFunc()
|
res, tNum <- tupleFunc()
|
||||||
<- res, SOME_NUM, SOME_STR, somethingToReturn, smthOption, tNum
|
<- res, SOME_NUM, SOME_STR, somethingToReturn, smthOption, tNum, m1, m2, mo1, mo2, mo3
|
@ -219,6 +219,11 @@ describe('Testing examples', () => {
|
|||||||
[1, 2],
|
[1, 2],
|
||||||
null,
|
null,
|
||||||
10,
|
10,
|
||||||
|
'non-opt',
|
||||||
|
1,
|
||||||
|
'opt',
|
||||||
|
1,
|
||||||
|
null,
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -154,6 +154,82 @@ export function registerGetNum(...args: any) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface GetMultiDef {
|
||||||
|
ret: (callParams: CallParams<null>) => [string, number];
|
||||||
|
retOpt: (callParams: CallParams<null>) => [string, number | null, number | null];
|
||||||
|
}
|
||||||
|
|
||||||
|
export function registerGetMulti(service: GetMultiDef): void;
|
||||||
|
export function registerGetMulti(serviceId: string, service: GetMultiDef): void;
|
||||||
|
export function registerGetMulti(peer: FluencePeer, service: GetMultiDef): void;
|
||||||
|
export function registerGetMulti(peer: FluencePeer, serviceId: string, service: GetMultiDef): void;
|
||||||
|
export function registerGetMulti(...args: any) {
|
||||||
|
let peer: FluencePeer;
|
||||||
|
let serviceId: any;
|
||||||
|
let service: any;
|
||||||
|
if (FluencePeer.isInstance(args[0])) {
|
||||||
|
peer = args[0];
|
||||||
|
} else {
|
||||||
|
peer = Fluence.getPeer();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof args[0] === 'string') {
|
||||||
|
serviceId = args[0];
|
||||||
|
} else if (typeof args[1] === 'string') {
|
||||||
|
serviceId = args[1];
|
||||||
|
} else {
|
||||||
|
serviceId = 'multiret-multiret';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Figuring out which overload is the service.
|
||||||
|
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
|
||||||
|
// If the first argument is peer, we are checking further. The second argument might either be
|
||||||
|
// an object, that it must be the service object
|
||||||
|
// or a string, which is the service id. In that case the service is the third argument
|
||||||
|
if (!FluencePeer.isInstance(args[0]) && typeof args[0] === 'object') {
|
||||||
|
service = args[0];
|
||||||
|
} else if (typeof args[1] === 'object') {
|
||||||
|
service = args[1];
|
||||||
|
} else {
|
||||||
|
service = args[2];
|
||||||
|
}
|
||||||
|
|
||||||
|
const incorrectServiceDefinitions = missingFields(service, ['ret', 'retOpt']);
|
||||||
|
if (!!incorrectServiceDefinitions.length) {
|
||||||
|
throw new Error(
|
||||||
|
'Error registering service GetMulti: missing functions: ' +
|
||||||
|
incorrectServiceDefinitions.map((d) => "'" + d + "'").join(', '),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
peer.internals.callServiceHandler.use((req, resp, next) => {
|
||||||
|
if (req.serviceId !== serviceId) {
|
||||||
|
next();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (req.fnName === 'ret') {
|
||||||
|
const callParams = {
|
||||||
|
...req.particleContext,
|
||||||
|
tetraplets: {},
|
||||||
|
};
|
||||||
|
resp.retCode = ResultCodes.success;
|
||||||
|
resp.result = service.ret(callParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (req.fnName === 'retOpt') {
|
||||||
|
const callParams = {
|
||||||
|
...req.particleContext,
|
||||||
|
tetraplets: {},
|
||||||
|
};
|
||||||
|
resp.retCode = ResultCodes.success;
|
||||||
|
resp.result = service.retOpt(callParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
next();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Functions
|
// Functions
|
||||||
|
|
||||||
export function tupleFunc(config?: { ttl?: number }): Promise<[string, number]>;
|
export function tupleFunc(config?: { ttl?: number }): Promise<[string, number]>;
|
||||||
@ -228,13 +304,17 @@ export function multiReturnFunc(
|
|||||||
somethingToReturn: number[],
|
somethingToReturn: number[],
|
||||||
smthOption: string | null,
|
smthOption: string | null,
|
||||||
config?: { ttl?: number },
|
config?: { ttl?: number },
|
||||||
): Promise<[string[], number, string, number[], string | null, number]>;
|
): Promise<
|
||||||
|
[string[], number, string, number[], string | null, number, string, number, string, number | null, number | null]
|
||||||
|
>;
|
||||||
export function multiReturnFunc(
|
export function multiReturnFunc(
|
||||||
peer: FluencePeer,
|
peer: FluencePeer,
|
||||||
somethingToReturn: number[],
|
somethingToReturn: number[],
|
||||||
smthOption: string | null,
|
smthOption: string | null,
|
||||||
config?: { ttl?: number },
|
config?: { ttl?: number },
|
||||||
): Promise<[string[], number, string, number[], string | null, number]>;
|
): Promise<
|
||||||
|
[string[], number, string, number[], string | null, number, string, number, string, number | null, number | null]
|
||||||
|
>;
|
||||||
export function multiReturnFunc(...args: any) {
|
export function multiReturnFunc(...args: any) {
|
||||||
let peer: FluencePeer;
|
let peer: FluencePeer;
|
||||||
let somethingToReturn: any;
|
let somethingToReturn: any;
|
||||||
@ -253,7 +333,21 @@ export function multiReturnFunc(...args: any) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let request: RequestFlow;
|
let request: RequestFlow;
|
||||||
const promise = new Promise<[string[], number, string, number[], string | null, number]>((resolve, reject) => {
|
const promise = new Promise<
|
||||||
|
[
|
||||||
|
string[],
|
||||||
|
number,
|
||||||
|
string,
|
||||||
|
number[],
|
||||||
|
string | null,
|
||||||
|
number,
|
||||||
|
string,
|
||||||
|
number,
|
||||||
|
string,
|
||||||
|
number | null,
|
||||||
|
number | null,
|
||||||
|
]
|
||||||
|
>((resolve, reject) => {
|
||||||
const r = new RequestFlowBuilder()
|
const r = new RequestFlowBuilder()
|
||||||
.disableInjections()
|
.disableInjections()
|
||||||
.withRawScript(
|
.withRawScript(
|
||||||
@ -264,6 +358,8 @@ export function multiReturnFunc(...args: any) {
|
|||||||
(seq
|
(seq
|
||||||
(seq
|
(seq
|
||||||
(seq
|
(seq
|
||||||
|
(seq
|
||||||
|
(seq
|
||||||
(seq
|
(seq
|
||||||
(seq
|
(seq
|
||||||
(seq
|
(seq
|
||||||
@ -276,6 +372,10 @@ export function multiReturnFunc(...args: any) {
|
|||||||
)
|
)
|
||||||
(call %init_peer_id% ("multiret-test" "retStr") ["random-str"] $res)
|
(call %init_peer_id% ("multiret-test" "retStr") ["random-str"] $res)
|
||||||
)
|
)
|
||||||
|
(call %init_peer_id% ("multiret-multiret" "ret") [] m1)
|
||||||
|
)
|
||||||
|
(call %init_peer_id% ("multiret-multiret" "retOpt") [] mo1)
|
||||||
|
)
|
||||||
(call %init_peer_id% ("multiret-test" "retStr") ["some-str"] str)
|
(call %init_peer_id% ("multiret-test" "retStr") ["some-str"] str)
|
||||||
)
|
)
|
||||||
(call %init_peer_id% ("multiret-num" "retNum") [] n)
|
(call %init_peer_id% ("multiret-num" "retNum") [] n)
|
||||||
@ -283,7 +383,7 @@ export function multiReturnFunc(...args: any) {
|
|||||||
(ap str $res)
|
(ap str $res)
|
||||||
)
|
)
|
||||||
(xor
|
(xor
|
||||||
(call %init_peer_id% ("callbackSrv" "response") [$res 5 "some-str" somethingToReturn smthOption n])
|
(call %init_peer_id% ("callbackSrv" "response") [$res 5 "some-str" somethingToReturn smthOption n m1 m2 mo1 mo2 mo3])
|
||||||
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
|
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
@ -310,6 +410,20 @@ export function multiReturnFunc(...args: any) {
|
|||||||
opt[4] = opt[4][0];
|
opt[4] = opt[4][0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (Array.isArray(opt[9])) {
|
||||||
|
if (opt[9].length === 0) {
|
||||||
|
opt[9] = null;
|
||||||
|
} else {
|
||||||
|
opt[9] = opt[9][0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Array.isArray(opt[10])) {
|
||||||
|
if (opt[10].length === 0) {
|
||||||
|
opt[10] = null;
|
||||||
|
} else {
|
||||||
|
opt[10] = opt[10][0];
|
||||||
|
}
|
||||||
|
}
|
||||||
return resolve(opt);
|
return resolve(opt);
|
||||||
});
|
});
|
||||||
h.onEvent('errorHandlingSrv', 'error', (args) => {
|
h.onEvent('errorHandlingSrv', 'error', (args) => {
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
import { FluencePeer } from '@fluencelabs/fluence';
|
import { FluencePeer } from '@fluencelabs/fluence';
|
||||||
import { multiReturnFunc, registerGetStr, registerGetNum } from '../compiled/examples/multiReturn';
|
import { multiReturnFunc, registerGetStr, registerGetNum, registerGetMulti } from '../compiled/examples/multiReturn';
|
||||||
|
|
||||||
export async function multiReturnCall(): Promise<[string[], number, string, number[], string | null, number]> {
|
export async function multiReturnCall(): Promise<
|
||||||
|
[string[], number, string, number[], string | null, number, string, number, string, number | null, number | null]
|
||||||
|
> {
|
||||||
registerGetStr({
|
registerGetStr({
|
||||||
retStr: (args0) => {
|
retStr: (args0) => {
|
||||||
return args0;
|
return args0;
|
||||||
@ -14,5 +16,14 @@ export async function multiReturnCall(): Promise<[string[], number, string, numb
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
registerGetMulti({
|
||||||
|
ret: () => {
|
||||||
|
return ['non-opt', 1];
|
||||||
|
},
|
||||||
|
retOpt: () => {
|
||||||
|
return ['opt', 1, null];
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
return await multiReturnFunc([1, 2], null);
|
return await multiReturnFunc([1, 2], null);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user