snapshot of https://github.com/ory/keto.git (master, 2026-09-16; blobs > 131072B omitted)
Some checks failed
CI / Run lints and checks (push) Failing after 47s
CI / Run tests (push) Failing after 1s
CI / Run race tests (push) Failing after 5s
CI / Build CLI docs (push) Has been skipped
CI / Run buf actions (push) Failing after 5s
CodeQL / Analyze (go) (push) Failing after 3s
CodeQL / Analyze (javascript) (push) Failing after 2s
Docker Image Scanners / scanners (push) Failing after 3s
Format / format (push) Failing after 3s
Synchronize Issue Labels / Synchronize Issue Labels (push) Has been skipped
CI / Generate release (push) Has been skipped
CI / Draft newsletter (push) Has been skipped
CI / Pending approval Slack notification (push) Has been skipped
CI / Send newsletter (push) Has been skipped
Some checks failed
CI / Run lints and checks (push) Failing after 47s
CI / Run tests (push) Failing after 1s
CI / Run race tests (push) Failing after 5s
CI / Build CLI docs (push) Has been skipped
CI / Run buf actions (push) Failing after 5s
CodeQL / Analyze (go) (push) Failing after 3s
CodeQL / Analyze (javascript) (push) Failing after 2s
Docker Image Scanners / scanners (push) Failing after 3s
Format / format (push) Failing after 3s
Synchronize Issue Labels / Synchronize Issue Labels (push) Has been skipped
CI / Generate release (push) Has been skipped
CI / Draft newsletter (push) Has been skipped
CI / Pending approval Slack notification (push) Has been skipped
CI / Send newsletter (push) Has been skipped
This commit is contained in:
114
cmd/relationtuple/output.go
Normal file
114
cmd/relationtuple/output.go
Normal file
@@ -0,0 +1,114 @@
|
||||
// Copyright © 2023 Ory Corp
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package relationtuple
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
|
||||
rts "github.com/ory/keto/gen/go/ory/keto/relation_tuples/v1alpha2"
|
||||
"github.com/ory/keto/ketoapi"
|
||||
)
|
||||
|
||||
type (
|
||||
Collection struct {
|
||||
apiRelations []*ketoapi.RelationTuple
|
||||
}
|
||||
OutputTuple struct {
|
||||
*ketoapi.RelationTuple
|
||||
}
|
||||
)
|
||||
|
||||
func NewProtoCollection(rels []*rts.RelationTuple) (*Collection, error) {
|
||||
r := &Collection{apiRelations: make([]*ketoapi.RelationTuple, len(rels))}
|
||||
for i, rel := range rels {
|
||||
var err error
|
||||
r.apiRelations[i], err = (&ketoapi.RelationTuple{}).FromDataProvider(rel)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
return r, nil
|
||||
}
|
||||
|
||||
func MustNewProtoCollection(rels []*rts.RelationTuple) *Collection {
|
||||
c, err := NewProtoCollection(rels)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return c
|
||||
}
|
||||
|
||||
func NewAPICollection(rels []*ketoapi.RelationTuple) *Collection {
|
||||
return &Collection{apiRelations: rels}
|
||||
}
|
||||
|
||||
func (r *Collection) Header() []string {
|
||||
return []string{
|
||||
"NAMESPACE",
|
||||
"OBJECT",
|
||||
"RELATION NAME",
|
||||
"SUBJECT",
|
||||
}
|
||||
}
|
||||
|
||||
func (r *Collection) Table() [][]string {
|
||||
ir := r.apiRelations
|
||||
|
||||
data := make([][]string, len(ir))
|
||||
for i, rel := range ir {
|
||||
var sub string
|
||||
if rel.SubjectID != nil {
|
||||
sub = *rel.SubjectID
|
||||
} else {
|
||||
sub = rel.SubjectSet.String()
|
||||
}
|
||||
|
||||
data[i] = []string{rel.Namespace, rel.Object, rel.Relation, sub}
|
||||
}
|
||||
|
||||
return data
|
||||
}
|
||||
|
||||
func (r *Collection) Interface() any { return r.apiRelations }
|
||||
func (r *Collection) UnmarshalJSON(raw []byte) error { return json.Unmarshal(raw, &r.apiRelations) }
|
||||
func (r *Collection) Len() int { return len(r.apiRelations) }
|
||||
|
||||
func (r *Collection) MarshalJSON() ([]byte, error) {
|
||||
ir := r.apiRelations
|
||||
return json.Marshal(ir)
|
||||
}
|
||||
|
||||
func (r *Collection) IDs() []string {
|
||||
ts := r.apiRelations
|
||||
ids := make([]string, len(ts))
|
||||
for i, rt := range ts {
|
||||
ids[i] = rt.String()
|
||||
}
|
||||
return ids
|
||||
}
|
||||
|
||||
func (r *OutputTuple) Header() []string {
|
||||
return []string{
|
||||
"NAMESPACE",
|
||||
"OBJECT ID",
|
||||
"RELATION NAME",
|
||||
"SUBJECT",
|
||||
}
|
||||
}
|
||||
|
||||
func (r *OutputTuple) Columns() []string {
|
||||
return []string{
|
||||
r.Namespace,
|
||||
r.Object,
|
||||
r.Relation,
|
||||
outputSubject(r.RelationTuple),
|
||||
}
|
||||
}
|
||||
|
||||
func outputSubject(r *ketoapi.RelationTuple) string {
|
||||
if r.SubjectID != nil {
|
||||
return *r.SubjectID
|
||||
}
|
||||
return r.SubjectSet.String()
|
||||
}
|
||||
Reference in New Issue
Block a user