diff --git a/pkg/netmap/clause.go b/pkg/netmap/clause.go new file mode 100644 index 00000000..87b4e477 --- /dev/null +++ b/pkg/netmap/clause.go @@ -0,0 +1,54 @@ +package netmap + +import ( + "github.com/nspcc-dev/neofs-api-go/v2/netmap" +) + +// Clause is an enumeration of selector modifiers +// that shows how the node set will be formed. +type Clause uint32 + +const ( + _ Clause = iota + + // ClauseSame is a selector modifier to select only nodes having the same value of bucket attribute. + ClauseSame + + // ClauseDistinct is a selector modifier to select nodes having different values of bucket attribute. + ClauseDistinct +) + +// ClauseFromV2 converts v2 Clause to Clause. +func ClauseFromV2(c netmap.Clause) Clause { + switch c { + default: + return 0 + case netmap.Same: + return ClauseSame + case netmap.Distinct: + return ClauseDistinct + } +} + +// ToV2 converts Clause to v2 Clause. +func (c Clause) ToV2() netmap.Clause { + switch c { + default: + return netmap.UnspecifiedClause + case ClauseDistinct: + return netmap.Distinct + case ClauseSame: + return netmap.Same + } +} + +func (c Clause) String() string { + switch c { + default: + return "UNSPECIFIED" + case ClauseDistinct: + return "DISTINCT" + case ClauseSame: + return "SAME" + } +} diff --git a/pkg/netmap/clause_test.go b/pkg/netmap/clause_test.go new file mode 100644 index 00000000..fd3a4648 --- /dev/null +++ b/pkg/netmap/clause_test.go @@ -0,0 +1,31 @@ +package netmap + +import ( + "testing" + + "github.com/nspcc-dev/neofs-api-go/v2/netmap" + "github.com/stretchr/testify/require" +) + +func TestClauseFromV2(t *testing.T) { + for _, item := range []struct { + c Clause + cV2 netmap.Clause + }{ + { + c: 0, + cV2: netmap.UnspecifiedClause, + }, + { + c: ClauseSame, + cV2: netmap.Same, + }, + { + c: ClauseDistinct, + cV2: netmap.Distinct, + }, + } { + require.Equal(t, item.c, ClauseFromV2(item.cV2)) + require.Equal(t, item.cV2, item.c.ToV2()) + } +} diff --git a/pkg/netmap/policy.go b/pkg/netmap/policy.go index be5c6e88..736cdff4 100644 --- a/pkg/netmap/policy.go +++ b/pkg/netmap/policy.go @@ -9,7 +9,6 @@ type PlacementPolicy = netmap.PlacementPolicy type Selector = netmap.Selector type Filter = netmap.Filter type Replica = netmap.Replica -type Clause = netmap.Clause func PlacementPolicyToJSON(p *PlacementPolicy) ([]byte, error) { return netmap.PlacementPolicyToJSON(p)