| Lorenz Brun | 11bf3d3 | 2025-01-07 17:49:27 +0100 | [diff] [blame] | 1 | From 8e349ae2eadbeb031ba01e7d1a98d6c5130ba7e3 Mon Sep 17 00:00:00 2001 |
| 2 | From: Lorenz Brun <lorenz@brun.one> |
| 3 | Date: Sat, 30 Nov 2024 01:05:11 +0100 |
| 4 | Subject: [PATCH 2/2] expr: add Dynamic for family-dependent evaluation |
| 5 | |
| 6 | This 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 | |
| 12 | diff --git a/expr/dynamic.go b/expr/dynamic.go |
| 13 | new file mode 100644 |
| 14 | index 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 | -- |
| 38 | 2.47.0 |
| 39 | |