From f3bddc2ba5df158f4b003bdb64f7505e13db5d69 Mon Sep 17 00:00:00 2001 From: Leonard Lyubich Date: Wed, 30 Sep 2020 18:57:39 +0300 Subject: [PATCH] [#164] sdk/object: Define filters to search virtual objects Signed-off-by: Leonard Lyubich --- pkg/object/search.go | 12 ++++++++++++ pkg/object/search_test.go | 28 ++++++++++++++++++++++++++++ pkg/object/wellknown_filters.go | 11 +++++++++++ 3 files changed, 51 insertions(+) diff --git a/pkg/object/search.go b/pkg/object/search.go index 8fea6af..e17d35b 100644 --- a/pkg/object/search.go +++ b/pkg/object/search.go @@ -110,3 +110,15 @@ func (f *SearchFilters) AddRootFilter() { func (f *SearchFilters) AddNonRootFilter() { f.addRootFilter(ValNonRoot) } + +func (f *SearchFilters) addLeafFilter(val string) { + f.AddFilter(KeyLeaf, val, MatchStringEqual) +} + +func (f *SearchFilters) AddLeafFilter() { + f.addLeafFilter(ValLeaf) +} + +func (f *SearchFilters) AddNonLeafFilter() { + f.addLeafFilter(ValNonLeaf) +} diff --git a/pkg/object/search_test.go b/pkg/object/search_test.go index 1058c5e..d3916ad 100644 --- a/pkg/object/search_test.go +++ b/pkg/object/search_test.go @@ -79,3 +79,31 @@ func TestSearchFilters_AddNonRootFilter(t *testing.T) { require.Equal(t, object.KeyRoot, f.Header()) require.Equal(t, object.ValNonRoot, f.Value()) } + +func TestSearchFilters_AddLeafFilter(t *testing.T) { + fs := new(object.SearchFilters) + + fs.AddLeafFilter() + + require.Len(t, *fs, 1) + + f := (*fs)[0] + + require.Equal(t, object.MatchStringEqual, f.Operation()) + require.Equal(t, object.KeyLeaf, f.Header()) + require.Equal(t, object.ValLeaf, f.Value()) +} + +func TestSearchFilters_AddNonLeafFilter(t *testing.T) { + fs := new(object.SearchFilters) + + fs.AddNonLeafFilter() + + require.Len(t, *fs, 1) + + f := (*fs)[0] + + require.Equal(t, object.MatchStringEqual, f.Operation()) + require.Equal(t, object.KeyLeaf, f.Header()) + require.Equal(t, object.ValNonLeaf, f.Value()) +} diff --git a/pkg/object/wellknown_filters.go b/pkg/object/wellknown_filters.go index 16ccd23..734a196 100644 --- a/pkg/object/wellknown_filters.go +++ b/pkg/object/wellknown_filters.go @@ -18,3 +18,14 @@ const ( // ValNonRoot is a value of non-root object filter. ValNonRoot = valFalse ) + +const ( + // KeyLeaf is a reserved search filter key to physically stored objects. + KeyLeaf = ReservedFilterPrefix + "LEAF" + + // ValLeaf is a value of physically stored object filter. + ValLeaf = valTrue + + // ValNonLeaf is a value of virtual object filter. + ValNonLeaf = valFalse +)