small cleanup in paths, primarily splitting files so that file contents are more clearly owned, which should be a little better for readability and code placement. Also renames `ServicePrefix` to `BuildPrefix` in anticipation of multi-service prefixes.
92 lines
1.9 KiB
Go
92 lines
1.9 KiB
Go
package selectors
|
|
|
|
import (
|
|
"golang.org/x/exp/maps"
|
|
|
|
"github.com/alcionai/corso/src/internal/common/idname"
|
|
"github.com/alcionai/corso/src/pkg/backup/identity"
|
|
"github.com/alcionai/corso/src/pkg/path"
|
|
)
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// reasoner interface compliance
|
|
// ---------------------------------------------------------------------------
|
|
|
|
var _ identity.Reasoner = &backupReason{}
|
|
|
|
type backupReason struct {
|
|
category path.CategoryType
|
|
resource string
|
|
service path.ServiceType
|
|
tenant string
|
|
}
|
|
|
|
func (br backupReason) Tenant() string {
|
|
return br.tenant
|
|
}
|
|
|
|
func (br backupReason) ProtectedResource() string {
|
|
return br.resource
|
|
}
|
|
|
|
func (br backupReason) Service() path.ServiceType {
|
|
return br.service
|
|
}
|
|
|
|
func (br backupReason) Category() path.CategoryType {
|
|
return br.category
|
|
}
|
|
|
|
func (br backupReason) SubtreePath() (path.Path, error) {
|
|
return path.BuildPrefix(
|
|
br.tenant,
|
|
br.resource,
|
|
br.service,
|
|
br.category)
|
|
}
|
|
|
|
func (br backupReason) key() string {
|
|
return br.category.String() + br.resource + br.service.String() + br.tenant
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// common transformer
|
|
// ---------------------------------------------------------------------------
|
|
|
|
type servicerCategorizerProvider interface {
|
|
pathServicer
|
|
pathCategorier
|
|
idname.Provider
|
|
}
|
|
|
|
func reasonsFor(
|
|
sel servicerCategorizerProvider,
|
|
tenantID string,
|
|
useOwnerNameForID bool,
|
|
) []identity.Reasoner {
|
|
service := sel.PathService()
|
|
reasons := map[string]identity.Reasoner{}
|
|
|
|
resource := sel.ID()
|
|
if useOwnerNameForID {
|
|
resource = sel.Name()
|
|
}
|
|
|
|
pc := sel.PathCategories()
|
|
|
|
for _, sl := range [][]path.CategoryType{pc.Includes, pc.Filters} {
|
|
for _, cat := range sl {
|
|
br := backupReason{
|
|
category: cat,
|
|
resource: resource,
|
|
service: service,
|
|
tenant: tenantID,
|
|
}
|
|
|
|
reasons[br.key()] = br
|
|
}
|
|
}
|
|
|
|
return maps.Values(reasons)
|
|
}
|