diff options
Diffstat (limited to 'external/evcli/identities.go')
-rw-r--r-- | external/evcli/identities.go | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/external/evcli/identities.go b/external/evcli/identities.go new file mode 100644 index 0000000..f89ae1b --- /dev/null +++ b/external/evcli/identities.go @@ -0,0 +1,73 @@ +package evcli + +import ( + "encoding/json" + "fmt" + "time" + + "github.com/exograd/eventline/pkg/eventline" + "github.com/exograd/eventline/pkg/utils" +) + +type IdentityPage struct { + Elements Identities `json:"elements"` + Previous *eventline.Cursor `json:"previous,omitempty"` + Next *eventline.Cursor `json:"next,omitempty"` +} + +type Identity struct { + Id eventline.Id `json:"id"` + ProjectId *eventline.Id `json:"project_id"` + Name string `json:"name"` + Status eventline.IdentityStatus `json:"status"` + ErrorMessage string `json:"error_message,omitempty"` + CreationTime time.Time `json:"creation_time"` + UpdateTime time.Time `json:"update_time"` + LastUseTime *time.Time `json:"last_use_time,omitempty"` + RefreshTime *time.Time `json:"refresh_time,omitempty"` + Connector string `json:"connector"` + Type string `json:"type"` + Data eventline.IdentityData `json:"-"` + RawData json.RawMessage `json:"data"` +} + +type Identities []*Identity + +func (i *Identity) SortKey(sort string) (key string) { + switch sort { + case "id": + key = i.Id.String() + case "name": + key = i.Name + default: + utils.Panicf("unknown identity sort %q", sort) + } + + return +} + +func (pi *Identity) MarshalJSON() ([]byte, error) { + type Identity2 Identity + + i := Identity2(*pi) + data, err := json.Marshal(i.Data) + if err != nil { + return nil, fmt.Errorf("cannot encode data: %w", err) + } + + i.RawData = data + + return json.Marshal(i) +} + +func (pi *Identity) UnmarshalJSON(data []byte) error { + type Identity2 Identity + + i := Identity2(*pi) + if err := json.Unmarshal(data, &i); err != nil { + return err + } + + *pi = Identity(i) + return nil +} |