From 5f66ae754f8a699cbd0fea5a36d89ad8999a890d Mon Sep 17 00:00:00 2001 From: ionutboangiu Date: Mon, 18 Oct 2021 16:20:53 +0300 Subject: [PATCH] Add new DynamicOpt type alongside clone and comparison and conversion functions --- utils/libdynamics.go | 64 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/utils/libdynamics.go b/utils/libdynamics.go index abf056056..771875197 100644 --- a/utils/libdynamics.go +++ b/utils/libdynamics.go @@ -77,6 +77,12 @@ type DynamicIntPointerOpt struct { Value *int } +type DynamicDurationPointerOpt struct { + FilterIDs []string `json:",omitempty"` + Tenant string + Value *time.Duration +} + func CloneDynamicStringSliceOpt(in []*DynamicStringSliceOpt) (cl []*DynamicStringSliceOpt) { cl = make([]*DynamicStringSliceOpt, len(in)) for i, val := range in { @@ -185,6 +191,18 @@ func CloneDynamicIntPointerOpt(in []*DynamicIntPointerOpt) (cl []*DynamicIntPoin return } +func CloneDynamicDurationPointerOpt(in []*DynamicDurationPointerOpt) (cl []*DynamicDurationPointerOpt) { + cl = make([]*DynamicDurationPointerOpt, len(in)) + for i, val := range in { + cl[i] = &DynamicDurationPointerOpt{ + Tenant: val.Tenant, + FilterIDs: CloneStringSlice(val.FilterIDs), + Value: DurationPointer(*val.Value), + } + } + return +} + func DynamicStringSliceOptEqual(v1, v2 []*DynamicStringSliceOpt) bool { if len(v1) != len(v2) { return false @@ -345,6 +363,24 @@ func DynamicIntPointerOptEqual(v1, v2 []*DynamicIntPointerOpt) bool { return true } +func DynamicDurationPointerOptEqual(v1, v2 []*DynamicDurationPointerOpt) bool { + if len(v1) != len(v2) { + return false + } + for i := range v1 { + if v1[i].Tenant != v2[i].Tenant { + return false + } + if !SliceStringEqual(v1[i].FilterIDs, v2[i].FilterIDs) { + return false + } + if *v1[i].Value != *v2[i].Value { + return false + } + } + return true +} + func CloneDecimalBig(in *decimal.Big) (cln *decimal.Big) { cln = new(decimal.Big) cln.Copy(in) @@ -426,3 +462,31 @@ func IntPointerToIntDynamicOpts(intPtOpts []*DynamicIntPointerOpt) (intOpts []*D } return } + +func StringToDurationPointerDynamicOpts(strOpts []*DynamicStringOpt) (durPtOpts []*DynamicDurationPointerOpt, err error) { + durPtOpts = make([]*DynamicDurationPointerOpt, len(strOpts)) + for index, opt := range strOpts { + var durOpt time.Duration + if durOpt, err = ParseDurationWithNanosecs(opt.Value); err != nil { + return + } + durPtOpts[index] = &DynamicDurationPointerOpt{ + Tenant: opt.Tenant, + FilterIDs: opt.FilterIDs, + Value: DurationPointer(durOpt), + } + } + return +} + +func DurationPointerToStringDynamicOpts(durPtOpts []*DynamicDurationPointerOpt) (strOpts []*DynamicStringOpt) { + strOpts = make([]*DynamicStringOpt, len(durPtOpts)) + for index, opt := range durPtOpts { + strOpts[index] = &DynamicStringOpt{ + FilterIDs: opt.FilterIDs, + Tenant: opt.Tenant, + Value: (*opt.Value).String(), + } + } + return +}