Skip to content

Commit 876c140

Browse files
authored
Handle falsy option values (#188)
1 parent 3e89c7d commit 876c140

File tree

2 files changed

+48
-1
lines changed

2 files changed

+48
-1
lines changed

packages/sdk/src/algebraic_type.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ export class SumType {
6262
this.variants[0].name === 'some' &&
6363
this.variants[1].name === 'none'
6464
) {
65-
if (value) {
65+
if (value !== null && value !== undefined) {
6666
writer.writeByte(0);
6767
this.variants[0].algebraicType.serialize(writer, value);
6868
} else {

packages/sdk/tests/algebraic_value.test.ts

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
SumValue,
88
} from '../src/algebraic_value';
99
import BinaryReader from '../src/binary_reader';
10+
import BinaryWriter from '../src/binary_writer';
1011

1112
describe('AlgebraicValue', () => {
1213
test('when created with a ProductValue it assigns the product property', () => {
@@ -27,6 +28,52 @@ describe('AlgebraicValue', () => {
2728
expect(av.asString()).toBe('foo');
2829
});
2930

31+
test('options handle falsy strings', () => {
32+
let stringOptionType = AlgebraicType.createOptionType(
33+
AlgebraicType.createStringType()
34+
);
35+
let writer = new BinaryWriter(1024);
36+
stringOptionType.serialize(writer, '');
37+
let parsed = stringOptionType.deserialize(
38+
new BinaryReader(writer.getBuffer())
39+
);
40+
// Make sure we don't turn this into undefined.
41+
expect(parsed).toEqual('');
42+
43+
writer = new BinaryWriter(1024);
44+
stringOptionType.serialize(writer, null);
45+
parsed = stringOptionType.deserialize(new BinaryReader(writer.getBuffer()));
46+
expect(parsed).toEqual(undefined);
47+
48+
writer = new BinaryWriter(1024);
49+
stringOptionType.serialize(writer, undefined);
50+
parsed = stringOptionType.deserialize(new BinaryReader(writer.getBuffer()));
51+
expect(parsed).toEqual(undefined);
52+
});
53+
54+
test('options handle falsy numbers', () => {
55+
let stringOptionType = AlgebraicType.createOptionType(
56+
AlgebraicType.createU32Type()
57+
);
58+
let writer = new BinaryWriter(1024);
59+
stringOptionType.serialize(writer, 0);
60+
let parsed = stringOptionType.deserialize(
61+
new BinaryReader(writer.getBuffer())
62+
);
63+
// Make sure we don't turn this into undefined.
64+
expect(parsed).toEqual(0);
65+
66+
writer = new BinaryWriter(1024);
67+
stringOptionType.serialize(writer, null);
68+
parsed = stringOptionType.deserialize(new BinaryReader(writer.getBuffer()));
69+
expect(parsed).toEqual(undefined);
70+
71+
writer = new BinaryWriter(1024);
72+
stringOptionType.serialize(writer, undefined);
73+
parsed = stringOptionType.deserialize(new BinaryReader(writer.getBuffer()));
74+
expect(parsed).toEqual(undefined);
75+
});
76+
3077
test('when created with a AlgebraicValue(AlgebraicValue[]) it can be requested as an array', () => {
3178
let array: AlgebraicValue[] = [new AlgebraicValue(1)];
3279
let av = new AlgebraicValue(array);

0 commit comments

Comments
 (0)