protected CultureInfo CultureInfo => CultureInfo.CurrentCulture;//TODO!!

        protected virtual HttpContent CreateContent(RequestUrlEncodedContent content)
        {
            var values  = new List <KeyValuePair <string, string> >();
            var charSet = content.ContentType.CharSet;

            foreach (var field in content.Fields)
            {
                var fieldContentType = new ContentType(field.MediaType, charSet);
                var fieldData        = RestSerializer.SerializeContent(fieldContentType, field.Content);
                var fieldValue       = Encoding.GetEncoding(charSet).GetString(fieldData);

                values.Add(new KeyValuePair <string, string>(field.Name, fieldValue));
            }

            var result = new FormUrlEncodedContent(values);

            return(WithHeaders(WithContentType(result, content.ContentType), content.Headers, CultureInfo));
        }
        public IRestRequest MapRequest(RequestMetadata metadata, IBindingData bindingSource)
        {
            metadata.AssertNotNull(nameof(metadata));
            bindingSource.AssertNotNull(nameof(bindingSource));

            var bindingContext = new RequestBindingContext(metadata, bindingSource);

            foreach (var binder in RequestBinders)
            {
                binder.Bind(bindingContext);
            }

            //TODO validate
            //bindingContext.Validate();

            if (bindingContext.FormFiles.Any())
            {
                throw new NotImplementedException();//TODO !
            }

            var request = new RestRequest()
            {
                Method  = bindingContext.Metadata.Method,
                Route   = bindingContext.Route,
                Timeout = bindingContext.Timeout
            };

            //TODO !!!
            if (bindingContext.FormFields.Any())
            {
                var content = new RequestUrlEncodedContent("utf-8"); //TODO

                foreach (var field in bindingContext.FormFields)
                {
                    content.AddField(field);
                }

                request.Content = content;
            }
            else if (bindingContext.Body != null)
            {
                request.Content = bindingContext.Body;
            }

            foreach (var header in bindingContext.Headers)
            {
                request.AddHeader(header);
            }

            foreach (var segment in bindingContext.Path)
            {
                request.AddRouteSegment(segment);
            }

            foreach (var query in bindingContext.Queries)
            {
                request.AddQuery(query);
            }

            return(request);
        }