github.com/CyCoreSystems/ari@v4.8.4+incompatible/client/native/modules.go (about) 1 package native 2 3 import ( 4 "errors" 5 6 "github.com/CyCoreSystems/ari" 7 ) 8 9 // Modules provides the ARI modules accessors for a native client 10 type Modules struct { 11 client *Client 12 } 13 14 // Get obtains a lazy handle to an asterisk module 15 func (m *Modules) Get(key *ari.Key) *ari.ModuleHandle { 16 return ari.NewModuleHandle(m.client.stamp(key), m) 17 } 18 19 // List lists the modules and returns lists of handles 20 func (m *Modules) List(filter *ari.Key) (ret []*ari.Key, err error) { 21 if filter == nil { 22 filter = ari.NodeKey(m.client.appName, m.client.node) 23 } 24 25 var modules = []struct { 26 Name string `json:"name"` 27 }{} 28 29 err = m.client.get("/asterisk/modules", &modules) 30 if err != nil { 31 return nil, err 32 } 33 34 for _, i := range modules { 35 k := m.client.stamp(ari.NewKey(ari.ModuleKey, i.Name)) 36 if filter.Match(k) { 37 if filter.Dialog != "" { 38 k.Dialog = filter.Dialog 39 } 40 ret = append(ret, k) 41 } 42 } 43 44 return 45 } 46 47 // Load loads the named asterisk module 48 func (m *Modules) Load(key *ari.Key) error { 49 return m.client.post("/asterisk/modules/"+key.ID, nil, nil) 50 } 51 52 // Reload reloads the named asterisk module 53 func (m *Modules) Reload(key *ari.Key) error { 54 return m.client.put("/asterisk/modules/"+key.ID, nil, nil) 55 } 56 57 // Unload unloads the named asterisk module 58 func (m *Modules) Unload(key *ari.Key) error { 59 return m.client.del("/asterisk/modules/"+key.ID, nil, "") 60 } 61 62 // Data retrieves the state of the named asterisk module 63 func (m *Modules) Data(key *ari.Key) (*ari.ModuleData, error) { 64 if key == nil || key.ID == "" { 65 return nil, errors.New("module key not supplied") 66 } 67 68 var data = new(ari.ModuleData) 69 if err := m.client.get("/asterisk/modules/"+key.ID, data); err != nil { 70 return nil, dataGetError(err, "module", "%v", key.ID) 71 } 72 73 data.Key = m.client.stamp(key) 74 return data, nil 75 }