mirror of
https://github.com/fluencelabs/aqua-playground
synced 2025-03-15 01:51:03 +00:00
Extend multireturn example
This commit is contained in:
parent
cc595d3a93
commit
c8519bbb16
@ -4,6 +4,10 @@ service GetStr("multiret-test"):
|
||||
service GetNum("multiret-num"):
|
||||
retNum: -> u8
|
||||
|
||||
service GetMulti("multiret-multiret"):
|
||||
ret: -> string, u8
|
||||
retOpt: -> string, ?u8, ?u8
|
||||
|
||||
const SOME_NUM = 5
|
||||
const SOME_STR = "some-str"
|
||||
|
||||
@ -12,9 +16,11 @@ func tupleFunc() -> string, u8:
|
||||
n <- GetNum.retNum()
|
||||
<- 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 <- GetStr.retStr(SOME_STR)
|
||||
res <- GetStr.retStr("random-str")
|
||||
m1, m2 <- GetMulti.ret()
|
||||
mo1, mo2, mo3 <- GetMulti.retOpt()
|
||||
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],
|
||||
null,
|
||||
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
|
||||
|
||||
export function tupleFunc(config?: { ttl?: number }): Promise<[string, number]>;
|
||||
@ -228,13 +304,17 @@ export function multiReturnFunc(
|
||||
somethingToReturn: number[],
|
||||
smthOption: string | null,
|
||||
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(
|
||||
peer: FluencePeer,
|
||||
somethingToReturn: number[],
|
||||
smthOption: string | null,
|
||||
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) {
|
||||
let peer: FluencePeer;
|
||||
let somethingToReturn: any;
|
||||
@ -253,7 +333,21 @@ export function multiReturnFunc(...args: any) {
|
||||
}
|
||||
|
||||
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()
|
||||
.disableInjections()
|
||||
.withRawScript(
|
||||
@ -267,14 +361,20 @@ export function multiReturnFunc(...args: any) {
|
||||
(seq
|
||||
(seq
|
||||
(seq
|
||||
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
|
||||
(call %init_peer_id% ("getDataSrv" "somethingToReturn") [] somethingToReturn)
|
||||
(seq
|
||||
(seq
|
||||
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
|
||||
(call %init_peer_id% ("getDataSrv" "somethingToReturn") [] somethingToReturn)
|
||||
)
|
||||
(call %init_peer_id% ("getDataSrv" "smthOption") [] smthOption)
|
||||
)
|
||||
(call %init_peer_id% ("multiret-test" "retStr") ["some-str"] $res)
|
||||
)
|
||||
(call %init_peer_id% ("getDataSrv" "smthOption") [] smthOption)
|
||||
(call %init_peer_id% ("multiret-test" "retStr") ["random-str"] $res)
|
||||
)
|
||||
(call %init_peer_id% ("multiret-test" "retStr") ["some-str"] $res)
|
||||
(call %init_peer_id% ("multiret-multiret" "ret") [] m1)
|
||||
)
|
||||
(call %init_peer_id% ("multiret-test" "retStr") ["random-str"] $res)
|
||||
(call %init_peer_id% ("multiret-multiret" "retOpt") [] mo1)
|
||||
)
|
||||
(call %init_peer_id% ("multiret-test" "retStr") ["some-str"] str)
|
||||
)
|
||||
@ -283,7 +383,7 @@ export function multiReturnFunc(...args: any) {
|
||||
(ap str $res)
|
||||
)
|
||||
(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])
|
||||
)
|
||||
)
|
||||
@ -310,6 +410,20 @@ export function multiReturnFunc(...args: any) {
|
||||
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);
|
||||
});
|
||||
h.onEvent('errorHandlingSrv', 'error', (args) => {
|
||||
|
@ -1,7 +1,9 @@
|
||||
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({
|
||||
retStr: (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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user