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 convers 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 convers 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 convers 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, } } // ToDetailsWithOrganizationDetails convers 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, } }