/// <summary>
        /// Parses HTTP response and creates new instance of this class
        /// </summary>
        /// <param name="response">HTTP response</param>
        /// <returns>New instance of this class</returns>
        internal static UploadMappingResults Parse(HttpWebResponse response)
        {
            UploadMappingResults result = Parse <UploadMappingResults>(response);

            if (result.Mappings == null)
            {
                result.Mappings = new Dictionary <string, string>();
            }

            if (result.JsonObj != null)
            {
                // parsing message
                var message = result.JsonObj.Value <string>("message") ?? string.Empty;
                result.Message = message;

                // parsing mappings
                var mappingsJToken = result.JsonObj["mappings"];
                if (mappingsJToken != null)
                {
                    var mappings = mappingsJToken.Children();
                    foreach (var mapping in mappings)
                    {
                        result.Mappings.Add(mapping["folder"].ToString(), mapping["template"].ToString());
                    }
                }

                // parsing single mapping
                var folder   = result.JsonObj.Value <string>("folder") ?? string.Empty;
                var template = result.JsonObj.Value <string>("template") ?? string.Empty;
                if (!string.IsNullOrEmpty(folder))
                {
                    result.Mappings.Add(folder, template);
                }

                //parsing NextCursor
                result.NextCursor = result.JsonObj.Value <string>("next_cursor") ?? string.Empty;
            }

            return(result);
        }