forked from Permify/permify
-
Notifications
You must be signed in to change notification settings - Fork 0
/
collections.go
114 lines (95 loc) · 2.69 KB
/
collections.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package database
import (
base "github.com/adminium/permify/pkg/pb/base/v1"
)
// TupleCollection -Tuple collection.
type TupleCollection struct {
tuples []*base.Tuple
}
// NewTupleCollection - Create new tuple collection.
func NewTupleCollection(tuples ...*base.Tuple) *TupleCollection {
if len(tuples) == 0 {
return &TupleCollection{}
}
return &TupleCollection{
tuples: tuples,
}
}
// CreateTupleIterator - Create tuple iterator according to collection.
func (t *TupleCollection) CreateTupleIterator() *TupleIterator {
return &TupleIterator{
tuples: t.tuples,
}
}
// GetTuples - Get tuples
func (t *TupleCollection) GetTuples() []*base.Tuple {
return t.tuples
}
// Add - New subject to collection.
func (t *TupleCollection) Add(tuple *base.Tuple) {
t.tuples = append(t.tuples, tuple)
}
// ToSubjectCollection - Converts new subject collection from given tuple collection
func (t *TupleCollection) ToSubjectCollection() *SubjectCollection {
subjects := make([]*base.Subject, len(t.tuples))
for index, tuple := range t.tuples {
subjects[index] = tuple.GetSubject()
}
return NewSubjectCollection(subjects...)
}
// SUBJECT
// SubjectCollection - Subject collection.
type SubjectCollection struct {
subjects []*base.Subject
}
// NewSubjectCollection - Create new subject collection.
func NewSubjectCollection(subjects ...*base.Subject) *SubjectCollection {
if len(subjects) == 0 {
return &SubjectCollection{}
}
return &SubjectCollection{
subjects: subjects,
}
}
// CreateSubjectIterator - Create subject iterator according to collection.
func (s *SubjectCollection) CreateSubjectIterator() *SubjectIterator {
return &SubjectIterator{
subjects: s.subjects,
}
}
// GetSubjects - Get subject collection
func (s *SubjectCollection) GetSubjects() []*base.Subject {
return s.subjects
}
// Add - New subject to collection.
func (s *SubjectCollection) Add(subject *base.Subject) {
s.subjects = append(s.subjects, subject)
}
// ENTITY
// EntityCollection - Entity collection.
type EntityCollection struct {
entities []*base.Entity
}
// NewEntityCollection - Create new subject collection.
func NewEntityCollection(entities ...*base.Entity) *EntityCollection {
if len(entities) == 0 {
return &EntityCollection{}
}
return &EntityCollection{
entities: entities,
}
}
// CreateEntityIterator - Create entity iterator according to collection.
func (e *EntityCollection) CreateEntityIterator() *EntityIterator {
return &EntityIterator{
entities: e.entities,
}
}
// GetEntities - Get entities
func (e *EntityCollection) GetEntities() []*base.Entity {
return e.entities
}
// Add - New subject to collection.
func (e *EntityCollection) Add(entity *base.Entity) {
e.entities = append(e.entities, entity)
}