Skip to content

Commit

Permalink
feat(primitives): implement integer type
Browse files Browse the repository at this point in the history
  • Loading branch information
tangdrew committed Jan 21, 2019
1 parent a8a2257 commit 85eb7b1
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 4 deletions.
2 changes: 1 addition & 1 deletion packages/primitives/src/boolean.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@

import { BooleanType, boolean } from "io-ts";

export { BooleanType as Boolean, boolean };
export { BooleanType, boolean };
5 changes: 3 additions & 2 deletions packages/primitives/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
* FHIR Primitive Runtime Types
*/

import { Boolean, boolean } from "./boolean";
import { BooleanType, boolean } from "./boolean";
import { IntegerType, integer } from "./integer";

export { Boolean, boolean };
export { BooleanType, boolean, IntegerType, integer };
20 changes: 20 additions & 0 deletions packages/primitives/src/integer.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/**
* Integer FHIR Primitive Runtime Type
*/

import { Type, success, failure, identity } from "io-ts";

export class IntegerType extends Type<number> {
readonly _tag: "IntegerType" = "IntegerType";
constructor() {
super(
"integer",
(m): m is number => typeof m === "number" && Number.isInteger(m),
(m, c) =>
this.is(m) && Number.isInteger(m) ? success(m) : failure(m, c),
identity
);
}
}

export const integer = new IntegerType();
2 changes: 1 addition & 1 deletion packages/primitives/test/boolean.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import { boolean } from "../src";
import { assertSuccess, assertFailure, assertStrictEqual } from "./helpers";

describe("boolean", () => {
describe("BooleanType", () => {
it("should succeed validating a valid value", () => {
const T = boolean;
assertSuccess(T.decode(true));
Expand Down
31 changes: 31 additions & 0 deletions packages/primitives/test/integer.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/**
* Tests for Integer Runtime Type
*/

import { IntegerType, integer } from "../src";
import { assertSuccess, assertFailure, assertStrictEqual } from "./helpers";

describe("IntegerType", () => {
it("should succeed validating a valid value", () => {
const T = integer;
assertSuccess(T.decode(2));
});

it("should return the same reference if validation succeeded and nothing changed", () => {
const T = integer;
const value = 2;
assertStrictEqual(T.decode(value), value);
});

it("should fail validating an invalid value", () => {
const T = integer;
assertFailure(T.decode(1.1), ["Invalid value 1.1 supplied to : integer"]);
});

it("should type guard", () => {
const T = new IntegerType();
expect(T.is(2)).toEqual(true);
expect(T.is(1.1)).toEqual(false);
expect(T.is(undefined)).toEqual(false);
});
});

0 comments on commit 85eb7b1

Please sign in to comment.