From 2bf906d31c15a6736ff59bdc454ecad758bf73af Mon Sep 17 00:00:00 2001 From: Derrick Hammer Date: Thu, 29 Feb 2024 23:35:45 -0500 Subject: [PATCH] refactor: change InitUnmarshaller to accept a variable number of metadata types, see if any match, and return what was found --- go.sum | 5 +++++ metadata/directory.go | 2 +- metadata/web_app.go | 2 +- serialize/seralizer.go | 20 +++++++++++++------- 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/go.sum b/go.sum index d4ad826..5f19d99 100644 --- a/go.sum +++ b/go.sum @@ -1,4 +1,5 @@ github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= +github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -20,6 +21,7 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/mr-tron/base58 v1.1.0 h1:Y51FGVJ91WBqCEabAi5OPUz38eAx8DakuAm5svLcsfQ= github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= @@ -53,11 +55,13 @@ go.sia.tech/jape v0.11.1 h1:M7IP+byXL7xOqzxcHUQuXW+q3sYMkYzmMlMw+q8ZZw0= go.sia.tech/jape v0.11.1/go.mod h1:4QqmBB+t3W7cNplXPj++ZqpoUb2PeiS66RLpXmEGap4= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/dig v1.17.0 h1:5Chju+tUvcC+N7N6EV08BJz41UZuO3BmHcN4A287ZLI= go.uber.org/dig v1.17.0/go.mod h1:rTxpf7l5I0eBTlE6/9RL+lDybC7WFwY2QH55ZSjy1mU= go.uber.org/fx v1.20.1 h1:zVwVQGS8zYvhh9Xxcu4w1M6ESyeMzebzj2NbSayZ4Mk= go.uber.org/fx v1.20.1/go.mod h1:iSYNbHf2y55acNCwCXKx7LbWb5WG1Bnue5RDXz1OREg= go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= +go.uber.org/goleak v1.2.0/go.mod h1:XJYK+MuIchqpmGmUSAzotztawfKvYLUIgg7guXrwVUo= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= @@ -69,6 +73,7 @@ golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17 h1:3MTrJm4PyNL9NBqvYDSj3DHl4 golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= diff --git a/metadata/directory.go b/metadata/directory.go index 61e1c72..d693ec1 100644 --- a/metadata/directory.go +++ b/metadata/directory.go @@ -49,7 +49,7 @@ func (dm *DirectoryMetadata) EncodeMsgpack(enc *msgpack.Encoder) error { } func (dm *DirectoryMetadata) DecodeMsgpack(dec *msgpack.Decoder) error { - err := serialize.InitUnmarshaller(types.MetadataTypeDirectory, dec) + _, err := serialize.InitUnmarshaller(dec, types.MetadataTypeDirectory) if err != nil { return err } diff --git a/metadata/web_app.go b/metadata/web_app.go index 80e6c3a..ce5ee45 100644 --- a/metadata/web_app.go +++ b/metadata/web_app.go @@ -64,7 +64,7 @@ func (wm *WebAppMetadata) EncodeMsgpack(enc *msgpack.Encoder) error { } func (wm *WebAppMetadata) DecodeMsgpack(dec *msgpack.Decoder) error { - err := serialize.InitUnmarshaller(types.MetadataTypeWebApp, dec) + _, err := serialize.InitUnmarshaller(dec, types.MetadataTypeWebApp) if err != nil { return err } diff --git a/serialize/seralizer.go b/serialize/seralizer.go index 545f210..14f2c51 100644 --- a/serialize/seralizer.go +++ b/serialize/seralizer.go @@ -4,6 +4,7 @@ import ( "errors" "git.lumeweb.com/LumeWeb/libs5-go/types" "github.com/vmihailenco/msgpack/v5" + "slices" ) func InitMarshaller(kind types.MetadataType, enc *msgpack.Encoder) error { @@ -19,24 +20,29 @@ func InitMarshaller(kind types.MetadataType, enc *msgpack.Encoder) error { return nil } -func InitUnmarshaller(kind types.MetadataType, enc *msgpack.Decoder) error { +func InitUnmarshaller(enc *msgpack.Decoder, kinds ...types.MetadataType) (types.MetadataType, error) { val, err := enc.DecodeUint8() if err != nil { - return err + return 0, err } if val != types.MetadataMagicByte { - return errors.New("Invalid magic byte") + return 0, errors.New("Invalid magic byte") } val, err = enc.DecodeUint8() if err != nil { - return err + return 0, err } - if val != uint8(kind) { - return errors.New("Invalid metadata type") + convertedKinds := make([]uint8, len(kinds)) + for i, v := range kinds { + convertedKinds[i] = uint8(v) } - return nil + if !slices.Contains(convertedKinds, val) { + return 0, errors.New("Invalid metadata type") + } + + return types.MetadataType(val), nil }