612 lines
18 KiB
Go
612 lines
18 KiB
Go
// Code generated by ent, DO NOT EDIT.
|
|
|
|
package ent
|
|
|
|
import (
|
|
"context"
|
|
"database/sql/driver"
|
|
"fmt"
|
|
|
|
"code.icod.de/dalu/ka/ent/category"
|
|
"code.icod.de/dalu/ka/ent/post"
|
|
"code.icod.de/dalu/ka/ent/profile"
|
|
"entgo.io/contrib/entgql"
|
|
"entgo.io/ent/dialect/sql"
|
|
"github.com/99designs/gqlgen/graphql"
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
// CollectFields tells the query-builder to eagerly load connected nodes by resolver context.
|
|
func (c *CategoryQuery) CollectFields(ctx context.Context, satisfies ...string) (*CategoryQuery, error) {
|
|
fc := graphql.GetFieldContext(ctx)
|
|
if fc == nil {
|
|
return c, nil
|
|
}
|
|
if err := c.collectField(ctx, false, graphql.GetOperationContext(ctx), fc.Field, nil, satisfies...); err != nil {
|
|
return nil, err
|
|
}
|
|
return c, nil
|
|
}
|
|
|
|
func (c *CategoryQuery) collectField(ctx context.Context, oneNode bool, opCtx *graphql.OperationContext, collected graphql.CollectedField, path []string, satisfies ...string) error {
|
|
path = append([]string(nil), path...)
|
|
var (
|
|
unknownSeen bool
|
|
fieldSeen = make(map[string]struct{}, len(category.Columns))
|
|
selectedFields = []string{category.FieldID}
|
|
)
|
|
for _, field := range graphql.CollectFields(opCtx, collected.Selections, satisfies) {
|
|
switch field.Name {
|
|
|
|
case "posts":
|
|
var (
|
|
alias = field.Alias
|
|
path = append(path, alias)
|
|
query = (&PostClient{config: c.config}).Query()
|
|
)
|
|
args := newPostPaginateArgs(fieldArgs(ctx, new(PostWhereInput), path...))
|
|
if err := validateFirstLast(args.first, args.last); err != nil {
|
|
return fmt.Errorf("validate first and last in path %q: %w", path, err)
|
|
}
|
|
pager, err := newPostPager(args.opts, args.last != nil)
|
|
if err != nil {
|
|
return fmt.Errorf("create new pager in path %q: %w", path, err)
|
|
}
|
|
if query, err = pager.applyFilter(query); err != nil {
|
|
return err
|
|
}
|
|
ignoredEdges := !hasCollectedField(ctx, append(path, edgesField)...)
|
|
if hasCollectedField(ctx, append(path, totalCountField)...) || hasCollectedField(ctx, append(path, pageInfoField)...) {
|
|
hasPagination := args.after != nil || args.first != nil || args.before != nil || args.last != nil
|
|
if hasPagination || ignoredEdges {
|
|
query := query.Clone()
|
|
c.loadTotal = append(c.loadTotal, func(ctx context.Context, nodes []*Category) error {
|
|
ids := make([]driver.Value, len(nodes))
|
|
for i := range nodes {
|
|
ids[i] = nodes[i].ID
|
|
}
|
|
var v []struct {
|
|
NodeID uuid.UUID `sql:"category_posts"`
|
|
Count int `sql:"count"`
|
|
}
|
|
query.Where(func(s *sql.Selector) {
|
|
s.Where(sql.InValues(s.C(category.PostsColumn), ids...))
|
|
})
|
|
if err := query.GroupBy(category.PostsColumn).Aggregate(Count()).Scan(ctx, &v); err != nil {
|
|
return err
|
|
}
|
|
m := make(map[uuid.UUID]int, len(v))
|
|
for i := range v {
|
|
m[v[i].NodeID] = v[i].Count
|
|
}
|
|
for i := range nodes {
|
|
n := m[nodes[i].ID]
|
|
if nodes[i].Edges.totalCount[0] == nil {
|
|
nodes[i].Edges.totalCount[0] = make(map[string]int)
|
|
}
|
|
nodes[i].Edges.totalCount[0][alias] = n
|
|
}
|
|
return nil
|
|
})
|
|
} else {
|
|
c.loadTotal = append(c.loadTotal, func(_ context.Context, nodes []*Category) error {
|
|
for i := range nodes {
|
|
n := len(nodes[i].Edges.Posts)
|
|
if nodes[i].Edges.totalCount[0] == nil {
|
|
nodes[i].Edges.totalCount[0] = make(map[string]int)
|
|
}
|
|
nodes[i].Edges.totalCount[0][alias] = n
|
|
}
|
|
return nil
|
|
})
|
|
}
|
|
}
|
|
if ignoredEdges || (args.first != nil && *args.first == 0) || (args.last != nil && *args.last == 0) {
|
|
continue
|
|
}
|
|
if query, err = pager.applyCursors(query, args.after, args.before); err != nil {
|
|
return err
|
|
}
|
|
path = append(path, edgesField, nodeField)
|
|
if field := collectedField(ctx, path...); field != nil {
|
|
if err := query.collectField(ctx, false, opCtx, *field, path, mayAddCondition(satisfies, postImplementors)...); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
if limit := paginateLimit(args.first, args.last); limit > 0 {
|
|
if oneNode {
|
|
pager.applyOrder(query.Limit(limit))
|
|
} else {
|
|
modify := entgql.LimitPerRow(category.PostsColumn, limit, pager.orderExpr(query))
|
|
query.modifiers = append(query.modifiers, modify)
|
|
}
|
|
} else {
|
|
query = pager.applyOrder(query)
|
|
}
|
|
c.WithNamedPosts(alias, func(wq *PostQuery) {
|
|
*wq = *query
|
|
})
|
|
case "createdAt":
|
|
if _, ok := fieldSeen[category.FieldCreatedAt]; !ok {
|
|
selectedFields = append(selectedFields, category.FieldCreatedAt)
|
|
fieldSeen[category.FieldCreatedAt] = struct{}{}
|
|
}
|
|
case "updatedAt":
|
|
if _, ok := fieldSeen[category.FieldUpdatedAt]; !ok {
|
|
selectedFields = append(selectedFields, category.FieldUpdatedAt)
|
|
fieldSeen[category.FieldUpdatedAt] = struct{}{}
|
|
}
|
|
case "title":
|
|
if _, ok := fieldSeen[category.FieldTitle]; !ok {
|
|
selectedFields = append(selectedFields, category.FieldTitle)
|
|
fieldSeen[category.FieldTitle] = struct{}{}
|
|
}
|
|
case "description":
|
|
if _, ok := fieldSeen[category.FieldDescription]; !ok {
|
|
selectedFields = append(selectedFields, category.FieldDescription)
|
|
fieldSeen[category.FieldDescription] = struct{}{}
|
|
}
|
|
case "id":
|
|
case "__typename":
|
|
default:
|
|
unknownSeen = true
|
|
}
|
|
}
|
|
if !unknownSeen {
|
|
c.Select(selectedFields...)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
type categoryPaginateArgs struct {
|
|
first, last *int
|
|
after, before *Cursor
|
|
opts []CategoryPaginateOption
|
|
}
|
|
|
|
func newCategoryPaginateArgs(rv map[string]any) *categoryPaginateArgs {
|
|
args := &categoryPaginateArgs{}
|
|
if rv == nil {
|
|
return args
|
|
}
|
|
if v := rv[firstField]; v != nil {
|
|
args.first = v.(*int)
|
|
}
|
|
if v := rv[lastField]; v != nil {
|
|
args.last = v.(*int)
|
|
}
|
|
if v := rv[afterField]; v != nil {
|
|
args.after = v.(*Cursor)
|
|
}
|
|
if v := rv[beforeField]; v != nil {
|
|
args.before = v.(*Cursor)
|
|
}
|
|
if v, ok := rv[orderByField]; ok {
|
|
switch v := v.(type) {
|
|
case map[string]any:
|
|
var (
|
|
err1, err2 error
|
|
order = &CategoryOrder{Field: &CategoryOrderField{}, Direction: entgql.OrderDirectionAsc}
|
|
)
|
|
if d, ok := v[directionField]; ok {
|
|
err1 = order.Direction.UnmarshalGQL(d)
|
|
}
|
|
if f, ok := v[fieldField]; ok {
|
|
err2 = order.Field.UnmarshalGQL(f)
|
|
}
|
|
if err1 == nil && err2 == nil {
|
|
args.opts = append(args.opts, WithCategoryOrder(order))
|
|
}
|
|
case *CategoryOrder:
|
|
if v != nil {
|
|
args.opts = append(args.opts, WithCategoryOrder(v))
|
|
}
|
|
}
|
|
}
|
|
if v, ok := rv[whereField].(*CategoryWhereInput); ok {
|
|
args.opts = append(args.opts, WithCategoryFilter(v.Filter))
|
|
}
|
|
return args
|
|
}
|
|
|
|
// CollectFields tells the query-builder to eagerly load connected nodes by resolver context.
|
|
func (po *PostQuery) CollectFields(ctx context.Context, satisfies ...string) (*PostQuery, error) {
|
|
fc := graphql.GetFieldContext(ctx)
|
|
if fc == nil {
|
|
return po, nil
|
|
}
|
|
if err := po.collectField(ctx, false, graphql.GetOperationContext(ctx), fc.Field, nil, satisfies...); err != nil {
|
|
return nil, err
|
|
}
|
|
return po, nil
|
|
}
|
|
|
|
func (po *PostQuery) collectField(ctx context.Context, oneNode bool, opCtx *graphql.OperationContext, collected graphql.CollectedField, path []string, satisfies ...string) error {
|
|
path = append([]string(nil), path...)
|
|
var (
|
|
unknownSeen bool
|
|
fieldSeen = make(map[string]struct{}, len(post.Columns))
|
|
selectedFields = []string{post.FieldID}
|
|
)
|
|
for _, field := range graphql.CollectFields(opCtx, collected.Selections, satisfies) {
|
|
switch field.Name {
|
|
|
|
case "category":
|
|
var (
|
|
alias = field.Alias
|
|
path = append(path, alias)
|
|
query = (&CategoryClient{config: po.config}).Query()
|
|
)
|
|
if err := query.collectField(ctx, oneNode, opCtx, field, path, mayAddCondition(satisfies, categoryImplementors)...); err != nil {
|
|
return err
|
|
}
|
|
po.withCategory = query
|
|
|
|
case "profile":
|
|
var (
|
|
alias = field.Alias
|
|
path = append(path, alias)
|
|
query = (&ProfileClient{config: po.config}).Query()
|
|
)
|
|
if err := query.collectField(ctx, oneNode, opCtx, field, path, mayAddCondition(satisfies, profileImplementors)...); err != nil {
|
|
return err
|
|
}
|
|
po.withProfile = query
|
|
case "createdAt":
|
|
if _, ok := fieldSeen[post.FieldCreatedAt]; !ok {
|
|
selectedFields = append(selectedFields, post.FieldCreatedAt)
|
|
fieldSeen[post.FieldCreatedAt] = struct{}{}
|
|
}
|
|
case "updatedAt":
|
|
if _, ok := fieldSeen[post.FieldUpdatedAt]; !ok {
|
|
selectedFields = append(selectedFields, post.FieldUpdatedAt)
|
|
fieldSeen[post.FieldUpdatedAt] = struct{}{}
|
|
}
|
|
case "expires":
|
|
if _, ok := fieldSeen[post.FieldExpires]; !ok {
|
|
selectedFields = append(selectedFields, post.FieldExpires)
|
|
fieldSeen[post.FieldExpires] = struct{}{}
|
|
}
|
|
case "expireTime":
|
|
if _, ok := fieldSeen[post.FieldExpireTime]; !ok {
|
|
selectedFields = append(selectedFields, post.FieldExpireTime)
|
|
fieldSeen[post.FieldExpireTime] = struct{}{}
|
|
}
|
|
case "title":
|
|
if _, ok := fieldSeen[post.FieldTitle]; !ok {
|
|
selectedFields = append(selectedFields, post.FieldTitle)
|
|
fieldSeen[post.FieldTitle] = struct{}{}
|
|
}
|
|
case "body":
|
|
if _, ok := fieldSeen[post.FieldBody]; !ok {
|
|
selectedFields = append(selectedFields, post.FieldBody)
|
|
fieldSeen[post.FieldBody] = struct{}{}
|
|
}
|
|
case "id":
|
|
case "__typename":
|
|
default:
|
|
unknownSeen = true
|
|
}
|
|
}
|
|
if !unknownSeen {
|
|
po.Select(selectedFields...)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
type postPaginateArgs struct {
|
|
first, last *int
|
|
after, before *Cursor
|
|
opts []PostPaginateOption
|
|
}
|
|
|
|
func newPostPaginateArgs(rv map[string]any) *postPaginateArgs {
|
|
args := &postPaginateArgs{}
|
|
if rv == nil {
|
|
return args
|
|
}
|
|
if v := rv[firstField]; v != nil {
|
|
args.first = v.(*int)
|
|
}
|
|
if v := rv[lastField]; v != nil {
|
|
args.last = v.(*int)
|
|
}
|
|
if v := rv[afterField]; v != nil {
|
|
args.after = v.(*Cursor)
|
|
}
|
|
if v := rv[beforeField]; v != nil {
|
|
args.before = v.(*Cursor)
|
|
}
|
|
if v, ok := rv[orderByField]; ok {
|
|
switch v := v.(type) {
|
|
case map[string]any:
|
|
var (
|
|
err1, err2 error
|
|
order = &PostOrder{Field: &PostOrderField{}, Direction: entgql.OrderDirectionAsc}
|
|
)
|
|
if d, ok := v[directionField]; ok {
|
|
err1 = order.Direction.UnmarshalGQL(d)
|
|
}
|
|
if f, ok := v[fieldField]; ok {
|
|
err2 = order.Field.UnmarshalGQL(f)
|
|
}
|
|
if err1 == nil && err2 == nil {
|
|
args.opts = append(args.opts, WithPostOrder(order))
|
|
}
|
|
case *PostOrder:
|
|
if v != nil {
|
|
args.opts = append(args.opts, WithPostOrder(v))
|
|
}
|
|
}
|
|
}
|
|
if v, ok := rv[whereField].(*PostWhereInput); ok {
|
|
args.opts = append(args.opts, WithPostFilter(v.Filter))
|
|
}
|
|
return args
|
|
}
|
|
|
|
// CollectFields tells the query-builder to eagerly load connected nodes by resolver context.
|
|
func (pr *ProfileQuery) CollectFields(ctx context.Context, satisfies ...string) (*ProfileQuery, error) {
|
|
fc := graphql.GetFieldContext(ctx)
|
|
if fc == nil {
|
|
return pr, nil
|
|
}
|
|
if err := pr.collectField(ctx, false, graphql.GetOperationContext(ctx), fc.Field, nil, satisfies...); err != nil {
|
|
return nil, err
|
|
}
|
|
return pr, nil
|
|
}
|
|
|
|
func (pr *ProfileQuery) collectField(ctx context.Context, oneNode bool, opCtx *graphql.OperationContext, collected graphql.CollectedField, path []string, satisfies ...string) error {
|
|
path = append([]string(nil), path...)
|
|
var (
|
|
unknownSeen bool
|
|
fieldSeen = make(map[string]struct{}, len(profile.Columns))
|
|
selectedFields = []string{profile.FieldID}
|
|
)
|
|
for _, field := range graphql.CollectFields(opCtx, collected.Selections, satisfies) {
|
|
switch field.Name {
|
|
|
|
case "posts":
|
|
var (
|
|
alias = field.Alias
|
|
path = append(path, alias)
|
|
query = (&PostClient{config: pr.config}).Query()
|
|
)
|
|
args := newPostPaginateArgs(fieldArgs(ctx, new(PostWhereInput), path...))
|
|
if err := validateFirstLast(args.first, args.last); err != nil {
|
|
return fmt.Errorf("validate first and last in path %q: %w", path, err)
|
|
}
|
|
pager, err := newPostPager(args.opts, args.last != nil)
|
|
if err != nil {
|
|
return fmt.Errorf("create new pager in path %q: %w", path, err)
|
|
}
|
|
if query, err = pager.applyFilter(query); err != nil {
|
|
return err
|
|
}
|
|
ignoredEdges := !hasCollectedField(ctx, append(path, edgesField)...)
|
|
if hasCollectedField(ctx, append(path, totalCountField)...) || hasCollectedField(ctx, append(path, pageInfoField)...) {
|
|
hasPagination := args.after != nil || args.first != nil || args.before != nil || args.last != nil
|
|
if hasPagination || ignoredEdges {
|
|
query := query.Clone()
|
|
pr.loadTotal = append(pr.loadTotal, func(ctx context.Context, nodes []*Profile) error {
|
|
ids := make([]driver.Value, len(nodes))
|
|
for i := range nodes {
|
|
ids[i] = nodes[i].ID
|
|
}
|
|
var v []struct {
|
|
NodeID uuid.UUID `sql:"profile_posts"`
|
|
Count int `sql:"count"`
|
|
}
|
|
query.Where(func(s *sql.Selector) {
|
|
s.Where(sql.InValues(s.C(profile.PostsColumn), ids...))
|
|
})
|
|
if err := query.GroupBy(profile.PostsColumn).Aggregate(Count()).Scan(ctx, &v); err != nil {
|
|
return err
|
|
}
|
|
m := make(map[uuid.UUID]int, len(v))
|
|
for i := range v {
|
|
m[v[i].NodeID] = v[i].Count
|
|
}
|
|
for i := range nodes {
|
|
n := m[nodes[i].ID]
|
|
if nodes[i].Edges.totalCount[0] == nil {
|
|
nodes[i].Edges.totalCount[0] = make(map[string]int)
|
|
}
|
|
nodes[i].Edges.totalCount[0][alias] = n
|
|
}
|
|
return nil
|
|
})
|
|
} else {
|
|
pr.loadTotal = append(pr.loadTotal, func(_ context.Context, nodes []*Profile) error {
|
|
for i := range nodes {
|
|
n := len(nodes[i].Edges.Posts)
|
|
if nodes[i].Edges.totalCount[0] == nil {
|
|
nodes[i].Edges.totalCount[0] = make(map[string]int)
|
|
}
|
|
nodes[i].Edges.totalCount[0][alias] = n
|
|
}
|
|
return nil
|
|
})
|
|
}
|
|
}
|
|
if ignoredEdges || (args.first != nil && *args.first == 0) || (args.last != nil && *args.last == 0) {
|
|
continue
|
|
}
|
|
if query, err = pager.applyCursors(query, args.after, args.before); err != nil {
|
|
return err
|
|
}
|
|
path = append(path, edgesField, nodeField)
|
|
if field := collectedField(ctx, path...); field != nil {
|
|
if err := query.collectField(ctx, false, opCtx, *field, path, mayAddCondition(satisfies, postImplementors)...); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
if limit := paginateLimit(args.first, args.last); limit > 0 {
|
|
if oneNode {
|
|
pager.applyOrder(query.Limit(limit))
|
|
} else {
|
|
modify := entgql.LimitPerRow(profile.PostsColumn, limit, pager.orderExpr(query))
|
|
query.modifiers = append(query.modifiers, modify)
|
|
}
|
|
} else {
|
|
query = pager.applyOrder(query)
|
|
}
|
|
pr.WithNamedPosts(alias, func(wq *PostQuery) {
|
|
*wq = *query
|
|
})
|
|
case "createdAt":
|
|
if _, ok := fieldSeen[profile.FieldCreatedAt]; !ok {
|
|
selectedFields = append(selectedFields, profile.FieldCreatedAt)
|
|
fieldSeen[profile.FieldCreatedAt] = struct{}{}
|
|
}
|
|
case "updatedAt":
|
|
if _, ok := fieldSeen[profile.FieldUpdatedAt]; !ok {
|
|
selectedFields = append(selectedFields, profile.FieldUpdatedAt)
|
|
fieldSeen[profile.FieldUpdatedAt] = struct{}{}
|
|
}
|
|
case "name":
|
|
if _, ok := fieldSeen[profile.FieldName]; !ok {
|
|
selectedFields = append(selectedFields, profile.FieldName)
|
|
fieldSeen[profile.FieldName] = struct{}{}
|
|
}
|
|
case "address":
|
|
if _, ok := fieldSeen[profile.FieldAddress]; !ok {
|
|
selectedFields = append(selectedFields, profile.FieldAddress)
|
|
fieldSeen[profile.FieldAddress] = struct{}{}
|
|
}
|
|
case "phone":
|
|
if _, ok := fieldSeen[profile.FieldPhone]; !ok {
|
|
selectedFields = append(selectedFields, profile.FieldPhone)
|
|
fieldSeen[profile.FieldPhone] = struct{}{}
|
|
}
|
|
case "id":
|
|
case "__typename":
|
|
default:
|
|
unknownSeen = true
|
|
}
|
|
}
|
|
if !unknownSeen {
|
|
pr.Select(selectedFields...)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
type profilePaginateArgs struct {
|
|
first, last *int
|
|
after, before *Cursor
|
|
opts []ProfilePaginateOption
|
|
}
|
|
|
|
func newProfilePaginateArgs(rv map[string]any) *profilePaginateArgs {
|
|
args := &profilePaginateArgs{}
|
|
if rv == nil {
|
|
return args
|
|
}
|
|
if v := rv[firstField]; v != nil {
|
|
args.first = v.(*int)
|
|
}
|
|
if v := rv[lastField]; v != nil {
|
|
args.last = v.(*int)
|
|
}
|
|
if v := rv[afterField]; v != nil {
|
|
args.after = v.(*Cursor)
|
|
}
|
|
if v := rv[beforeField]; v != nil {
|
|
args.before = v.(*Cursor)
|
|
}
|
|
if v, ok := rv[orderByField]; ok {
|
|
switch v := v.(type) {
|
|
case map[string]any:
|
|
var (
|
|
err1, err2 error
|
|
order = &ProfileOrder{Field: &ProfileOrderField{}, Direction: entgql.OrderDirectionAsc}
|
|
)
|
|
if d, ok := v[directionField]; ok {
|
|
err1 = order.Direction.UnmarshalGQL(d)
|
|
}
|
|
if f, ok := v[fieldField]; ok {
|
|
err2 = order.Field.UnmarshalGQL(f)
|
|
}
|
|
if err1 == nil && err2 == nil {
|
|
args.opts = append(args.opts, WithProfileOrder(order))
|
|
}
|
|
case *ProfileOrder:
|
|
if v != nil {
|
|
args.opts = append(args.opts, WithProfileOrder(v))
|
|
}
|
|
}
|
|
}
|
|
if v, ok := rv[whereField].(*ProfileWhereInput); ok {
|
|
args.opts = append(args.opts, WithProfileFilter(v.Filter))
|
|
}
|
|
return args
|
|
}
|
|
|
|
const (
|
|
afterField = "after"
|
|
firstField = "first"
|
|
beforeField = "before"
|
|
lastField = "last"
|
|
orderByField = "orderBy"
|
|
directionField = "direction"
|
|
fieldField = "field"
|
|
whereField = "where"
|
|
)
|
|
|
|
func fieldArgs(ctx context.Context, whereInput any, path ...string) map[string]any {
|
|
field := collectedField(ctx, path...)
|
|
if field == nil || field.Arguments == nil {
|
|
return nil
|
|
}
|
|
oc := graphql.GetOperationContext(ctx)
|
|
args := field.ArgumentMap(oc.Variables)
|
|
return unmarshalArgs(ctx, whereInput, args)
|
|
}
|
|
|
|
// unmarshalArgs allows extracting the field arguments from their raw representation.
|
|
func unmarshalArgs(ctx context.Context, whereInput any, args map[string]any) map[string]any {
|
|
for _, k := range []string{firstField, lastField} {
|
|
v, ok := args[k]
|
|
if !ok {
|
|
continue
|
|
}
|
|
i, err := graphql.UnmarshalInt(v)
|
|
if err == nil {
|
|
args[k] = &i
|
|
}
|
|
}
|
|
for _, k := range []string{beforeField, afterField} {
|
|
v, ok := args[k]
|
|
if !ok {
|
|
continue
|
|
}
|
|
c := &Cursor{}
|
|
if c.UnmarshalGQL(v) == nil {
|
|
args[k] = c
|
|
}
|
|
}
|
|
if v, ok := args[whereField]; ok && whereInput != nil {
|
|
if err := graphql.UnmarshalInputFromContext(ctx, v, whereInput); err == nil {
|
|
args[whereField] = whereInput
|
|
}
|
|
}
|
|
|
|
return args
|
|
}
|
|
|
|
// mayAddCondition appends another type condition to the satisfies list
|
|
// if it does not exist in the list.
|
|
func mayAddCondition(satisfies []string, typeCond []string) []string {
|
|
Cond:
|
|
for _, c := range typeCond {
|
|
for _, s := range satisfies {
|
|
if c == s {
|
|
continue Cond
|
|
}
|
|
}
|
|
satisfies = append(satisfies, c)
|
|
}
|
|
return satisfies
|
|
}
|