Files
bridge/internal/metal/providers/emapi/memberships.go
2023-07-01 00:04:52 +00:00

85 lines
1.9 KiB
Go

package emapi
import (
"go.equinixmetal.net/infra9-metal-bridge/internal/metal/models"
)
type Roles []string
type Memberships []*Membership
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
}
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
}
type Membership struct {
client *Client
HREF string `json:"href"`
ID string `json:"id"`
Roles Roles `json:"roles"`
User *User `json:"user"`
}
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,
}
}
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,
}
}