1515package nitric
1616
1717import (
18- "context"
1918 "fmt"
2019
2120 "github.com/nitrictech/go-sdk/api/topics"
@@ -52,48 +51,37 @@ type topic struct {
5251}
5352
5453type subscribableTopic struct {
55- name string
56- manager Manager
54+ name string
55+ manager Manager
56+ registerChan chan RegisterResult
5757}
5858
5959// NewTopic creates a new Topic with the give permissions.
6060func NewTopic (name string ) SubscribableTopic {
61- return & subscribableTopic {
62- name : name ,
63- manager : defaultManager ,
64- }
65- }
66-
67- func (t * subscribableTopic ) Allow (permission TopicPermission , permissions ... TopicPermission ) (Topic , error ) {
68- allPerms := append ([]TopicPermission {permission }, permissions ... )
69-
70- return defaultManager .newTopic (t .name , allPerms ... )
71- }
72-
73- func (m * manager ) newTopic (name string , permissions ... TopicPermission ) (Topic , error ) {
74- rsc , err := m .resourceServiceClient ()
75- if err != nil {
76- return nil , err
77- }
78-
79- res := & v1.ResourceIdentifier {
80- Type : v1 .ResourceType_Topic ,
81- Name : name ,
61+ topic := & subscribableTopic {
62+ name : name ,
63+ manager : defaultManager ,
64+ registerChan : make (chan RegisterResult ),
8265 }
8366
84- dr := & v1.ResourceDeclareRequest {
85- Id : res ,
67+ go defaultManager .registerResource (& v1.ResourceDeclareRequest {
68+ Id : & v1.ResourceIdentifier {
69+ Type : v1 .ResourceType_Topic ,
70+ Name : name ,
71+ },
8672 Config : & v1.ResourceDeclareRequest_Topic {
8773 Topic : & v1.TopicResource {},
8874 },
89- }
90- _ , err = rsc .Declare (context .Background (), dr )
91- if err != nil {
92- return nil , err
93- }
75+ }, topic .registerChan )
76+
77+ return topic
78+ }
79+
80+ func (t * subscribableTopic ) Allow (permission TopicPermission , permissions ... TopicPermission ) (Topic , error ) {
81+ allPerms := append ([]TopicPermission {permission }, permissions ... )
9482
9583 actions := []v1.Action {}
96- for _ , perm := range permissions {
84+ for _ , perm := range allPerms {
9785 switch perm {
9886 case TopicPublish :
9987 actions = append (actions , v1 .Action_TopicPublish )
@@ -102,7 +90,12 @@ func (m *manager) newTopic(name string, permissions ...TopicPermission) (Topic,
10290 }
10391 }
10492
105- _ , err = rsc .Declare (context .Background (), functionResourceDeclareRequest (res , actions ))
93+ registerResult := <- t .registerChan
94+ if registerResult .Err != nil {
95+ return nil , registerResult .Err
96+ }
97+
98+ m , err := t .manager .registerPolicy (registerResult .Identifier , actions ... )
10699 if err != nil {
107100 return nil , err
108101 }
@@ -116,7 +109,7 @@ func (m *manager) newTopic(name string, permissions ...TopicPermission) (Topic,
116109 }
117110
118111 return & topic {
119- Topic : m .topics .Topic (name ),
112+ Topic : m .topics .Topic (t . name ),
120113 manager : m ,
121114 }, nil
122115}
0 commit comments