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 +)