Skip to content

Commit 239442e

Browse files
committed
feat(json-pack): 🎸 add Bencode encoding support for Set type
1 parent 3808e18 commit 239442e

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

src/json-pack/bencode/BencodeEncoder.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ export class BencodeEncoder implements BinaryJsonEncoder {
4242
return this.writeBin(value as Uint8Array);
4343
case Map:
4444
return this.writeMap(value as Map<unknown, unknown>);
45+
case Set:
46+
return this.writeSet(value as Set<unknown>);
4547
default:
4648
return this.writeUnknown(value);
4749
}
@@ -155,4 +157,8 @@ export class BencodeEncoder implements BinaryJsonEncoder {
155157
}
156158
writer.u8(0x65); // 'e'
157159
}
160+
161+
public writeSet(set: Set<unknown>): void {
162+
this.writeArr([...set.values()]);
163+
}
158164
}

src/json-pack/bencode/__tests__/BencodeEncoder.spec.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,28 @@ describe('array', () => {
134134
});
135135
});
136136

137+
describe('set', () => {
138+
test('empty array', () => {
139+
assertEncoder(new Set(), utf8`le`);
140+
});
141+
142+
test('array with one integer element', () => {
143+
assertEncoder(new Set([1]), utf8`li1ee`);
144+
});
145+
146+
test('array with two integer elements', () => {
147+
assertEncoder(new Set([1, 2]), utf8`li1ei2ee`);
148+
});
149+
150+
test('array of array', () => {
151+
assertEncoder(new Set([new Set([123])]), utf8`lli123eee`);
152+
});
153+
154+
test('array of various types', () => {
155+
assertEncoder(new Set([0, 1.32, 'str', new Set([1, 2, 3])]), utf8`li0ei1e3:strli1ei2ei3eee`);
156+
});
157+
});
158+
137159
describe('object', () => {
138160
test('empty object', () => {
139161
assertEncoder({}, utf8`de`);

0 commit comments

Comments
 (0)