@harmoniclabs/plu-ts-onchain
Version:
An embedded DSL for Cardano smart contracts creation coupled with a library for Cardano transactions, all in Typescript
25 lines (24 loc) • 1.7 kB
TypeScript
import { PType } from "../../PType/index.js";
import { PData } from "../../PTypes/PData/PData.js";
import { PList } from "../../PTypes/PList.js";
import { SopInstance } from "../../PTypes/PSoP/psop.js";
import { Term } from "../../Term/index.js";
import { SopCtorDef, SopDefinition } from "../../type_system/index.js";
import { TermList } from "../std/UtilityTerms/TermList.js";
import { UtilityTermOf } from "../std/UtilityTerms/addUtilityForType.js";
export type RawStructCtorCallback = (mathcedCtorsFields: Term<PList<PData>>) => Term<PType>;
export type EmptyObject = {
[x: string | number | symbol]: never;
};
export type MatchRest<PReturnT extends PType> = {
_: (continuation: (mathcedCtorsFields: TermList<PData>) => Term<PReturnT>) => UtilityTermOf<PReturnT>;
};
export type TypedPMatchOptions<SDef extends SopDefinition, PReturnT extends PType> = {
[Ctor in keyof SDef as `on${Capitalize<string & Ctor>}`]: (cb: (mathcedCtorsFields: SopInstance<SDef[Ctor]>) => Term<PReturnT>) => Omit<SDef, Ctor> extends EmptyObject ? UtilityTermOf<PReturnT> : TypedPMatchOptions<Omit<SDef, Ctor>, PReturnT>;
} & MatchRest<PReturnT>;
export type MathcedCtorsFields<SCtorDef extends SopCtorDef> = SopInstance<SCtorDef>;
export type PMatchOptions<SDef extends SopDefinition> = {
[Ctor in keyof SDef as `on${Capitalize<string & Ctor>}`]: <PReturnT extends PType>(cb: (mathcedCtorsFields: MathcedCtorsFields<SDef[Ctor]>) => Term<PReturnT>) => Omit<SDef, Ctor> extends EmptyObject ? UtilityTermOf<PReturnT> : TypedPMatchOptions<Omit<SDef, Ctor>, PReturnT>;
} & {
_: <PReturnT extends PType>(continuation: (mathcedCtorsFields: TermList<PData>) => Term<PReturnT>) => UtilityTermOf<PReturnT>;
};