Files
bridge/internal/metal/providers/emapi/memberships.go
Mike Mason 4d1e9717e5 fix linting
2023-07-17 19:27:12 +00:00

90 lines
2.4 KiB
Go

package emapi
import (
"go.equinixmetal.net/infra9-metal-bridge/internal/metal/models"
)
// Roles contains a list of roles.
type Roles []string
// Memberships contains a list of memberships
type Memberships []*Membership
// ToDetailsWithOrganizationDetails converts the memberships to generic membership models with organization details.
func (m Memberships) ToDetailsWithOrganizationDetails(orgDetails *models.OrganizationDetails) []*models.Membership[models.OrganizationDetails] {
memberships := make([]*models.Membership[models.OrganizationDetails], len(m))
var nextIndex int
for _, membership := range m {
memberships[nextIndex] = membership.ToDetailsWithOrganizationDetails(orgDetails)
if memberships[nextIndex] != nil {
nextIndex++
}
}
if nextIndex < len(m) {
return memberships[:nextIndex]
}
return memberships
}
// ToDetailsWithProjectDetails converts the memberships to generic membership models with project details.
func (m Memberships) ToDetailsWithProjectDetails(projDetails *models.ProjectDetails) []*models.Membership[models.ProjectDetails] {
memberships := make([]*models.Membership[models.ProjectDetails], len(m))
var nextIndex int
for _, membership := range m {
memberships[nextIndex] = membership.ToDetailsWithProjectDetails(projDetails)
if memberships[nextIndex] != nil {
nextIndex++
}
}
if nextIndex < len(m) {
return memberships[:nextIndex]
}
return memberships
}
// Membership contains membership information.
type Membership struct {
HREF string `json:"href"`
ID string `json:"id"`
Roles Roles `json:"roles"`
User *User `json:"user"`
}
// ToDetailsWithOrganizationDetails converts the membership to generic membership model with organization details.
func (m *Membership) ToDetailsWithOrganizationDetails(orgDetails *models.OrganizationDetails) *models.Membership[models.OrganizationDetails] {
if m.ID == "" {
return nil
}
return &models.Membership[models.OrganizationDetails]{
ID: m.ID,
Roles: m.Roles,
User: m.User.ToDetails(),
Entity: orgDetails,
}
}
// ToDetailsWithProjectDetails converts the membership to generic membership model with organization details.
func (m *Membership) ToDetailsWithProjectDetails(projDetails *models.ProjectDetails) *models.Membership[models.ProjectDetails] {
if m.ID == "" {
return nil
}
return &models.Membership[models.ProjectDetails]{
ID: m.ID,
Roles: m.Roles,
User: m.User.ToDetails(),
Entity: projDetails,
}
}