Skip to content

Commit e359ab8

Browse files
authored
Merge pull request #1229 from waku-org/chore/remove-code-dupe-enr
2 parents a2966c2 + b3228a2 commit e359ab8

File tree

1 file changed

+70
-78
lines changed

1 file changed

+70
-78
lines changed

packages/enr/src/raw_enr.ts

+70-78
Original file line numberDiff line numberDiff line change
@@ -46,105 +46,51 @@ export class RawEnr extends Map<ENRKey, ENRValue> {
4646
}
4747

4848
get ip(): string | undefined {
49-
const raw = this.get("ip");
50-
if (raw) {
51-
return convertToString("ip4", raw) as string;
52-
} else {
53-
return undefined;
54-
}
49+
return getStringValue(this, "ip", "ip4");
5550
}
5651

5752
set ip(ip: string | undefined) {
58-
if (ip) {
59-
this.set("ip", convertToBytes("ip4", ip));
60-
} else {
61-
this.delete("ip");
62-
}
53+
setStringValue(this, "ip", "ip4", ip);
6354
}
6455

6556
get tcp(): number | undefined {
66-
const raw = this.get("tcp");
67-
if (raw) {
68-
return Number(convertToString("tcp", raw));
69-
} else {
70-
return undefined;
71-
}
57+
return getNumberAsStringValue(this, "tcp", "tcp");
7258
}
7359

7460
set tcp(port: number | undefined) {
75-
if (port === undefined) {
76-
this.delete("tcp");
77-
} else {
78-
this.set("tcp", convertToBytes("tcp", port.toString(10)));
79-
}
61+
setNumberAsStringValue(this, "tcp", "tcp", port);
8062
}
8163

8264
get udp(): number | undefined {
83-
const raw = this.get("udp");
84-
if (raw) {
85-
return Number(convertToString("udp", raw));
86-
} else {
87-
return undefined;
88-
}
65+
return getNumberAsStringValue(this, "udp", "udp");
8966
}
9067

9168
set udp(port: number | undefined) {
92-
if (port === undefined) {
93-
this.delete("udp");
94-
} else {
95-
this.set("udp", convertToBytes("udp", port.toString(10)));
96-
}
69+
setNumberAsStringValue(this, "udp", "udp", port);
9770
}
9871

9972
get ip6(): string | undefined {
100-
const raw = this.get("ip6");
101-
if (raw) {
102-
return convertToString("ip6", raw) as string;
103-
} else {
104-
return undefined;
105-
}
73+
return getStringValue(this, "ip6", "ip6");
10674
}
10775

10876
set ip6(ip: string | undefined) {
109-
if (ip) {
110-
this.set("ip6", convertToBytes("ip6", ip));
111-
} else {
112-
this.delete("ip6");
113-
}
77+
setStringValue(this, "ip6", "ip6", ip);
11478
}
11579

11680
get tcp6(): number | undefined {
117-
const raw = this.get("tcp6");
118-
if (raw) {
119-
return Number(convertToString("tcp", raw));
120-
} else {
121-
return undefined;
122-
}
81+
return getNumberAsStringValue(this, "tcp6", "tcp");
12382
}
12483

12584
set tcp6(port: number | undefined) {
126-
if (port === undefined) {
127-
this.delete("tcp6");
128-
} else {
129-
this.set("tcp6", convertToBytes("tcp", port.toString(10)));
130-
}
85+
setNumberAsStringValue(this, "tcp6", "tcp", port);
13186
}
13287

13388
get udp6(): number | undefined {
134-
const raw = this.get("udp6");
135-
if (raw) {
136-
return Number(convertToString("udp", raw));
137-
} else {
138-
return undefined;
139-
}
89+
return getNumberAsStringValue(this, "udp6", "udp");
14090
}
14191

14292
set udp6(port: number | undefined) {
143-
if (port === undefined) {
144-
this.delete("udp6");
145-
} else {
146-
this.set("udp6", convertToBytes("udp", port.toString(10)));
147-
}
93+
setNumberAsStringValue(this, "udp6", "udp", port);
14894
}
14995

15096
/**
@@ -180,12 +126,7 @@ export class RawEnr extends Map<ENRKey, ENRValue> {
180126
* ie, without a peer id.
181127
*/
182128
set multiaddrs(multiaddrs: Multiaddr[] | undefined) {
183-
if (multiaddrs === undefined) {
184-
this.delete("multiaddrs");
185-
} else {
186-
const multiaddrsBuf = encodeMultiaddrs(multiaddrs);
187-
this.set("multiaddrs", multiaddrsBuf);
188-
}
129+
deleteUndefined(this, "multiaddrs", multiaddrs, encodeMultiaddrs);
189130
}
190131

191132
/**
@@ -202,11 +143,62 @@ export class RawEnr extends Map<ENRKey, ENRValue> {
202143
* Set the `waku2` field on the ENR.
203144
*/
204145
set waku2(waku2: Waku2 | undefined) {
205-
if (waku2 === undefined) {
206-
this.delete("waku2");
207-
} else {
208-
const byte = encodeWaku2(waku2);
209-
this.set("waku2", new Uint8Array([byte]));
210-
}
146+
deleteUndefined(
147+
this,
148+
"waku2",
149+
waku2,
150+
(w) => new Uint8Array([encodeWaku2(w)])
151+
);
152+
}
153+
}
154+
155+
function getStringValue(
156+
map: Map<ENRKey, ENRValue>,
157+
key: ENRKey,
158+
proto: string
159+
): string | undefined {
160+
const raw = map.get(key);
161+
if (!raw) return;
162+
return convertToString(proto, raw);
163+
}
164+
165+
function getNumberAsStringValue(
166+
map: Map<ENRKey, ENRValue>,
167+
key: ENRKey,
168+
proto: string
169+
): number | undefined {
170+
const raw = map.get(key);
171+
if (!raw) return;
172+
return Number(convertToString(proto, raw));
173+
}
174+
175+
function setStringValue(
176+
map: Map<ENRKey, ENRValue>,
177+
key: ENRKey,
178+
proto: string,
179+
value: string | undefined
180+
): void {
181+
deleteUndefined(map, key, value, convertToBytes.bind({}, proto));
182+
}
183+
184+
function setNumberAsStringValue(
185+
map: Map<ENRKey, ENRValue>,
186+
key: ENRKey,
187+
proto: string,
188+
value: number | undefined
189+
): void {
190+
setStringValue(map, key, proto, value?.toString(10));
191+
}
192+
193+
function deleteUndefined<K, V, W>(
194+
map: Map<K, W>,
195+
key: K,
196+
value: V | undefined,
197+
transform: (v: V) => W
198+
): void {
199+
if (value !== undefined) {
200+
map.set(key, transform(value));
201+
} else {
202+
map.delete(key);
211203
}
212204
}

0 commit comments

Comments
 (0)