commit dca6d303c1d15d49305f538dd62df7a65cdfcc38
parent 48bac7d4a9d2846b0309dab0fb92e1c36f854a92
Author: Florian Dold <florian.dold@gmail.com>
Date: Mon, 14 Nov 2016 00:57:29 +0100
add validators to checkable classes
Diffstat:
2 files changed, 28 insertions(+), 3 deletions(-)
diff --git 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
@@ -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;