Skip to content

Commit 84f114b

Browse files
committed
chore: extract and simplify getLocationMultiaddr
Using switch/case when appropriate.
1 parent af5c573 commit 84f114b

File tree

2 files changed

+50
-43
lines changed

2 files changed

+50
-43
lines changed

packages/enr/src/enr.ts

+3-43
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import debug from "debug";
1717

1818
import { ERR_INVALID_ID } from "./constants.js";
1919
import { keccak256, verifySignature } from "./crypto.js";
20-
import { multiaddrFromFields } from "./multiaddr_from_fields.js";
20+
import { locationMultiaddrFromEnrFields } from "./get_multiaddr.js";
2121
import { decodeMultiaddrs, encodeMultiaddrs } from "./multiaddrs_codec.js";
2222
import { createPeerIdFromPublicKey } from "./peer_id.js";
2323
import * as v4 from "./v4.js";
@@ -231,49 +231,9 @@ export class ENR extends Map<ENRKey, ENRValue> implements IEnr {
231231
}
232232
}
233233

234-
getLocationMultiaddr(
234+
getLocationMultiaddr: (
235235
protocol: "udp" | "udp4" | "udp6" | "tcp" | "tcp4" | "tcp6"
236-
): Multiaddr | undefined {
237-
if (protocol === "udp") {
238-
return (
239-
this.getLocationMultiaddr("udp4") || this.getLocationMultiaddr("udp6")
240-
);
241-
}
242-
if (protocol === "tcp") {
243-
return (
244-
this.getLocationMultiaddr("tcp4") || this.getLocationMultiaddr("tcp6")
245-
);
246-
}
247-
const isIpv6 = protocol.endsWith("6");
248-
const ipVal = this.get(isIpv6 ? "ip6" : "ip");
249-
if (!ipVal) {
250-
return;
251-
}
252-
253-
const isUdp = protocol.startsWith("udp");
254-
const isTcp = protocol.startsWith("tcp");
255-
let protoName, protoVal;
256-
if (isUdp) {
257-
protoName = "udp";
258-
protoVal = isIpv6 ? this.get("udp6") : this.get("udp");
259-
} else if (isTcp) {
260-
protoName = "tcp";
261-
protoVal = isIpv6 ? this.get("tcp6") : this.get("tcp");
262-
} else {
263-
return;
264-
}
265-
266-
if (!protoVal) {
267-
return;
268-
}
269-
270-
return multiaddrFromFields(
271-
isIpv6 ? "ip6" : "ip4",
272-
protoName,
273-
ipVal,
274-
protoVal
275-
);
276-
}
236+
) => Multiaddr | undefined = locationMultiaddrFromEnrFields.bind({}, this);
277237

278238
setLocationMultiaddr(multiaddr: Multiaddr): void {
279239
const protoNames = multiaddr.protoNames();

packages/enr/src/get_multiaddr.ts

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import { Multiaddr } from "@multiformats/multiaddr";
2+
import type { IEnr } from "@waku/interfaces";
3+
4+
import { multiaddrFromFields } from "./multiaddr_from_fields.js";
5+
6+
export function locationMultiaddrFromEnrFields(
7+
enr: IEnr,
8+
protocol: "udp" | "udp4" | "udp6" | "tcp" | "tcp4" | "tcp6"
9+
): Multiaddr | undefined {
10+
switch (protocol) {
11+
case "udp":
12+
return (
13+
locationMultiaddrFromEnrFields(enr, "udp4") ||
14+
locationMultiaddrFromEnrFields(enr, "udp6")
15+
);
16+
case "tcp":
17+
return (
18+
locationMultiaddrFromEnrFields(enr, "tcp4") ||
19+
locationMultiaddrFromEnrFields(enr, "tcp6")
20+
);
21+
}
22+
const isIpv6 = protocol.endsWith("6");
23+
const ipVal = enr.get(isIpv6 ? "ip6" : "ip");
24+
if (!ipVal) return;
25+
26+
const protoName = protocol.slice(0, 3);
27+
let protoVal;
28+
switch (protoName) {
29+
case "udp":
30+
protoVal = isIpv6 ? enr.get("udp6") : enr.get("udp");
31+
break;
32+
case "tcp":
33+
protoVal = isIpv6 ? enr.get("tcp6") : enr.get("tcp");
34+
break;
35+
default:
36+
return;
37+
}
38+
39+
if (!protoVal) return;
40+
41+
return multiaddrFromFields(
42+
isIpv6 ? "ip6" : "ip4",
43+
protoName,
44+
ipVal,
45+
protoVal
46+
);
47+
}

0 commit comments

Comments
 (0)