mirror of https://github.com/hashicorp/consul
62 lines
1.5 KiB
Go
62 lines
1.5 KiB
Go
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: BUSL-1.1
|
|
|
|
package resource
|
|
|
|
import "github.com/hashicorp/consul/proto-public/pbresource"
|
|
|
|
// Reference returns a reference to the resource with the given ID.
|
|
func Reference(id *pbresource.ID, section string) *pbresource.Reference {
|
|
return &pbresource.Reference{
|
|
Type: id.Type,
|
|
Tenancy: id.Tenancy,
|
|
Name: id.Name,
|
|
Section: section,
|
|
}
|
|
}
|
|
|
|
// IDFromReference returns a Reference converted into an ID. NOTE: the UID
|
|
// field is not populated, and the Section field of a reference is dropped.
|
|
func IDFromReference(ref *pbresource.Reference) *pbresource.ID {
|
|
return &pbresource.ID{
|
|
Type: ref.Type,
|
|
Tenancy: ref.Tenancy,
|
|
Name: ref.Name,
|
|
}
|
|
}
|
|
|
|
// ReferenceOrID is the common accessors shared by pbresource.Reference and
|
|
// pbresource.ID.
|
|
type ReferenceOrID interface {
|
|
GetType() *pbresource.Type
|
|
GetTenancy() *pbresource.Tenancy
|
|
GetName() string
|
|
}
|
|
|
|
var (
|
|
_ ReferenceOrID = (*pbresource.ID)(nil)
|
|
_ ReferenceOrID = (*pbresource.Reference)(nil)
|
|
)
|
|
|
|
func ReferenceFromReferenceOrID(ref ReferenceOrID) *pbresource.Reference {
|
|
switch x := ref.(type) {
|
|
case *pbresource.Reference:
|
|
return x
|
|
default:
|
|
return &pbresource.Reference{
|
|
Type: ref.GetType(),
|
|
Tenancy: ref.GetTenancy(),
|
|
Name: ref.GetName(),
|
|
Section: "",
|
|
}
|
|
}
|
|
}
|
|
|
|
func ReplaceType(typ *pbresource.Type, id *pbresource.ID) *pbresource.ID {
|
|
return &pbresource.ID{
|
|
Type: typ,
|
|
Name: id.Name,
|
|
Tenancy: id.Tenancy,
|
|
}
|
|
}
|