blob: 078d8271ee038c7ddfaa51a988274433fd0da8ad [file] [log] [blame]
Lorenz Brun11bf3d32025-01-07 17:49:27 +01001From 8e349ae2eadbeb031ba01e7d1a98d6c5130ba7e3 Mon Sep 17 00:00:00 2001
2From: Lorenz Brun <lorenz@brun.one>
3Date: Sat, 30 Nov 2024 01:05:11 +0100
4Subject: [PATCH 2/2] expr: add Dynamic for family-dependent evaluation
5
6This is used with a wrapper to implement easy dual-stack programming.
7---
8 expr/dynamic.go | 19 +++++++++++++++++++
9 1 file changed, 19 insertions(+)
10 create mode 100644 expr/dynamic.go
11
12diff --git a/expr/dynamic.go b/expr/dynamic.go
13new file mode 100644
14index 0000000..c7ee5e1
15--- /dev/null
16+++ b/expr/dynamic.go
17@@ -0,0 +1,19 @@
18+package expr
19+
20+// Dynamic can be used to return an expression based on the address family
21+// the expression is used in.
22+type Dynamic struct {
23+ Expr func(fam uint8) Any
24+}
25+
26+func (d *Dynamic) marshal(fam byte) ([]byte, error) {
27+ return d.Expr(fam).marshal(fam)
28+}
29+
30+func (d *Dynamic) marshalData(fam byte) ([]byte, error) {
31+ return d.Expr(fam).marshalData(fam)
32+}
33+
34+func (d *Dynamic) unmarshal(fam byte, data []byte) error {
35+ return d.Expr(fam).unmarshal(fam, data)
36+}
37--
382.47.0
39