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  }