aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/checkable.ts21
-rw-r--r--src/types.ts9
2 files changed, 28 insertions, 2 deletions
diff --git a/src/checkable.ts b/src/checkable.ts
index 89d0c7150..b6ef49fac 100644
--- a/src/checkable.ts
+++ b/src/checkable.ts
@@ -156,6 +156,25 @@ export namespace Checkable {
}
+ export function ClassWithValidator(target: any) {
+ target.checked = (v: any) => {
+ let cv = checkValue(v, {
+ propertyKey: "(root)",
+ type: target,
+ checker: checkValue
+ }, ["(root)"]);
+ let instance = new target();
+ if (typeof instance.validate !== "function") {
+ throw Error("invalid Checkable annotion: validate method required");
+ }
+ // May throw exception
+ instance.validate.call(cv);
+ return cv;
+ };
+ return target;
+ }
+
+
export function Value(type: any) {
if (!type) {
throw Error("Type does not exist yet (wrong order of definitions?)");
@@ -259,4 +278,4 @@ export namespace Checkable {
}
return chk;
}
-} \ No newline at end of file
+}
diff --git a/src/types.ts b/src/types.ts
index 39d374069..8f24fda90 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -360,8 +360,15 @@ interface Merchant {
instance?: string;
}
-@Checkable.Class
+@Checkable.ClassWithValidator
export class Contract {
+
+ validate() {
+ if (this.exchanges.length == 0) {
+ throw Error("no exchanges in contract");
+ }
+ }
+
@Checkable.String
H_wire: string;