diff options
author | Florian Dold <florian.dold@gmail.com> | 2017-05-27 15:05:41 +0200 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2017-05-27 15:05:41 +0200 |
commit | 41f152b80ac10de22f330ec240196db484a8a479 (patch) | |
tree | c6725b0c37307ea8af04cff60150b83278aa648a /src | |
parent | f9e1ad0624c4b76df45a689aff5d39bb74f80183 (diff) |
simplify Checkable.Class annotation and allow extra fields in /keys response
Diffstat (limited to 'src')
-rw-r--r-- | src/checkable.ts | 70 | ||||
-rw-r--r-- | src/types.ts | 12 | ||||
-rw-r--r-- | src/wallet.ts | 14 |
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; |