/// <summary>
        ///     Get all available module types.
        /// </summary>
        /// <param name="type"></param>
        /// <param name="tag"></param>
        /// <param name="token"></param>
        /// <returns></returns>
        internal Task <List <T> > GetModuleTypesAsync <T>(RuleMemberType type, string tag = default(string),
                                                          CancellationToken token         = default(CancellationToken))
        {
            var typeParameter = !string.IsNullOrWhiteSpace(type.ToString())
                ? new ResourceParameter("type", type.ToString())
                : null;
            var tagsParameter = !string.IsNullOrWhiteSpace(tag) ? new ResourceParameter("tags", tag) : null;

            var parameters = Resource.FormatParameters(typeParameter, tagsParameter);
            var resource   = $"/module-types{parameters}";

            return(OpenHab.RestClient.ExecuteRequestAsync <List <T> >(Method.GET, resource, token: token));
        }
 /// <summary>
 ///     Get all available module types.
 /// </summary>
 /// <param name="type"></param>
 /// <param name="tag"></param>
 /// <returns></returns>
 public List <ModuleType> GetModuleTypes(RuleMemberType type, string tag = default(string))
 {
     return(GetModuleTypesAsync(type, tag).Result);
 }