aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2017-05-27 15:05:41 +0200
committerFlorian Dold <florian.dold@gmail.com>2017-05-27 15:05:41 +0200
commit41f152b80ac10de22f330ec240196db484a8a479 (patch)
treec6725b0c37307ea8af04cff60150b83278aa648a
parentf9e1ad0624c4b76df45a689aff5d39bb74f80183 (diff)
downloadwallet-core-41f152b80ac10de22f330ec240196db484a8a479.tar.xz
simplify Checkable.Class annotation and allow extra fields in /keys response
-rw-r--r--src/checkable.ts70
-rw-r--r--src/types.ts12
-rw-r--r--src/wallet.ts14
3 files changed, 34 insertions, 62 deletions
diff --git a/src/checkable.ts b/src/checkable.ts
index 6bfaea013..24eebc713 100644
--- a/src/checkable.ts
+++ b/src/checkable.ts
@@ -206,55 +206,27 @@ export namespace Checkable {
* This annotation adds the implementation of the `checked`
* static method.
*/
- export function Class(target: any) {
- target.checked = (v: any) => {
- return checkValue(v, {
- propertyKey: "(root)",
- type: target,
- checker: checkValue
- }, ["(root)"]);
- };
- return target;
- }
-
- /**
- * A checker for a class (see [[Class]) that allows
- * extra properties to exist on the JSON object being validated.
- */
- export function ClassWithExtra(target: any) {
- target.checked = (v: any) => {
- return checkValue(v, {
- propertyKey: "(root)",
- type: target,
- extraAllowed: true,
- checker: checkValue
- }, ["(root)"]);
- };
- return target;
- }
-
-
- /**
- * A validator for a class that can have an additional validate
- * method. The validate method is a member method of type `() => void`
- * that throws an exception on invalidation errors.
- */
- 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 Class(opts: {extra?: boolean, validate?: boolean} = {}) {
+ return (target: any) => {
+ target.checked = (v: any) => {
+ let cv = checkValue(v, {
+ propertyKey: "(root)",
+ type: target,
+ extraAllowed: !!opts.extra,
+ checker: checkValue
+ }, ["(root)"]);
+ if (opts.validate) {
+ 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;
+ }
}
diff --git a/src/types.ts b/src/types.ts
index 9b8facf78..26280874c 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -28,7 +28,7 @@
*/
import { Checkable } from "./checkable";
-@Checkable.Class
+@Checkable.Class()
export class AmountJson {
@Checkable.Number
value: number;
@@ -106,7 +106,7 @@ export interface CurrencyRecord {
}
-@Checkable.Class
+@Checkable.Class()
export class CreateReserveResponse {
/**
* Exchange URL where the bank should create the reserve.
@@ -187,7 +187,7 @@ export class DenominationRecord {
/**
* Denomination as found in the /keys response from the exchange.
*/
-@Checkable.Class
+@Checkable.Class()
export class Denomination {
@Checkable.Value(AmountJson)
value: AmountJson;
@@ -304,7 +304,7 @@ export interface PaybackRequest {
coin_sig: string;
}
-@Checkable.Class
+@Checkable.Class()
export class PaybackConfirmation {
/**
* public key of the reserve that will receive the payback.
@@ -477,7 +477,7 @@ export interface CoinRecord {
}
-@Checkable.Class
+@Checkable.Class()
export class ExchangeHandle {
@Checkable.String
master_pub: string;
@@ -524,7 +524,7 @@ interface Merchant {
instance?: string;
}
-@Checkable.ClassWithValidator
+@Checkable.Class({validate: true})
export class Contract {
validate() {
diff --git a/src/wallet.ts b/src/wallet.ts
index f2c38078b..f48fcc76e 100644
--- a/src/wallet.ts
+++ b/src/wallet.ts
@@ -89,7 +89,7 @@ export interface CoinWithDenom {
* Element of the payback list that the
* exchange gives us in /keys.
*/
-@Checkable.Class
+@Checkable.Class()
export class Payback {
@Checkable.String
h_denom_pub: string;
@@ -99,7 +99,7 @@ export class Payback {
/**
* Structure that the exchange gives us in /keys.
*/
-@Checkable.Class
+@Checkable.Class({extra: true})
export class KeysJson {
@Checkable.List(Checkable.Value(Denomination))
denoms: Denomination[];
@@ -129,7 +129,7 @@ export class KeysJson {
}
-@Checkable.Class
+@Checkable.Class()
class WireFeesJson {
@Checkable.Value(AmountJson)
wire_fee: AmountJson;
@@ -150,7 +150,7 @@ class WireFeesJson {
}
-@Checkable.ClassWithExtra
+@Checkable.Class({extra: true})
class WireDetailJson {
@Checkable.String
type: string;
@@ -162,7 +162,7 @@ class WireDetailJson {
}
-@Checkable.Class
+@Checkable.Class()
export class CreateReserveRequest {
/**
* The initial amount for the reserve.
@@ -180,7 +180,7 @@ export class CreateReserveRequest {
}
-@Checkable.Class
+@Checkable.Class()
export class ConfirmReserveRequest {
/**
* Public key of then reserve that should be marked
@@ -193,7 +193,7 @@ export class ConfirmReserveRequest {
}
-@Checkable.Class
+@Checkable.Class()
export class OfferRecord {
@Checkable.Value(Contract)
contract: Contract;