Skip to content

Commit d02b4bc

Browse files
authored
Merge pull request #121 from Mangopay/bugfix/string_split
added reference to external proj and used it
2 parents 4977f97 + ca10303 commit d02b4bc

File tree

1 file changed

+51
-22
lines changed

1 file changed

+51
-22
lines changed

MangoPay.SDK/Core/RestTool.cs

Lines changed: 51 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -764,16 +764,19 @@ private ListPaginated<T> ReadResponseHeaders<T>(IList<Parameter> headers, ListPa
764764

765765
if (header.Name.ToLower().Contains(Constants.X_NUMBER_OF_PAGES.ToLower()))
766766
{
767-
listPaginated.TotalPages = int.Parse(value); continue;
767+
listPaginated.TotalPages = int.Parse(value);
768+
continue;
768769
}
769770

770771
if (header.Name.ToLower().Contains(Constants.X_NUMBER_OF_ITEMS.ToLower()))
771772
{
772-
listPaginated.TotalItems = int.Parse(value); continue;
773+
listPaginated.TotalItems = int.Parse(value);
774+
continue;
773775
}
774776

775777
if (header.Name.ToLower().Contains(Constants.LINK.ToLower()))
776778
{
779+
777780
var links = CustomSplit(value, ',');
778781

779782
if (links.Count <= 0) continue;
@@ -788,26 +791,63 @@ private ListPaginated<T> ReadResponseHeaders<T>(IList<Parameter> headers, ListPa
788791
private List<string> CustomSplit(string input, char delim)
789792
{
790793
var list = new List<string>();
791-
while (input.Contains(delim))
794+
var pos = new List<int> {0};
795+
796+
for (var i = 0; i < input.Length; i++)
792797
{
793-
var pos = input.IndexOf(delim);
794-
var add = input.Substring(0, pos).Trim();
795-
list.Add(add);
796-
input = input.Substring(pos + 1);
798+
if (input[i] == delim)
799+
{
800+
pos.Add(i + 1);
801+
}
797802
}
798803

799-
list.Add(input);
804+
pos.Add(input.Length + 1);
805+
806+
for (var i = 1; i < pos.Count; i++)
807+
{
808+
var length = pos[i] - pos[i - 1] - 1;
809+
var charArray = new char[length];
810+
var count = 0;
811+
for (var j = pos[i - 1]; j < pos[i] - 1; j++)
812+
{
813+
charArray[count++] = input[j];
814+
}
815+
816+
list.Add(new string(charArray));
817+
}
800818

801819
return list;
802820
}
803821

822+
private string SubstractFromRel(string rel, char delim)
823+
{
824+
var pos = new List<int>();
825+
826+
for (var i = 0; i < rel.Length; i++)
827+
{
828+
if (rel[i] == delim)
829+
{
830+
pos.Add(i + 1);
831+
}
832+
}
833+
834+
var length = pos[1] - pos[0] - 1;
835+
var charArr = new char[length];
836+
var count = 0;
837+
for (var i = pos[0]; i < pos[1] - 1; i++)
838+
{
839+
charArr[count++] = rel[i];
840+
}
841+
842+
return new string(charArr);
843+
}
844+
804845
private void SetLinksForList<T>(ListPaginated<T> listPaginated, List<string> links)
805846
{
806847
foreach (var l in links)
807848
{
808-
var link = RemoveCharactersFromLink(l);
809-
810-
var oneLink = CustomSplit(link, ';');
849+
var oneLink = CustomSplit(l, ';');
850+
oneLink[1] = SubstractFromRel(oneLink[1], '"');
811851

812852
if (oneLink[0] != null && oneLink[1] != null)
813853
{
@@ -819,17 +859,6 @@ private void SetLinksForList<T>(ListPaginated<T> listPaginated, List<string> lin
819859
}
820860
}
821861

822-
private string RemoveCharactersFromLink(string input)
823-
{
824-
var link = input;
825-
link = link.Replace("<\"", "");
826-
link = link.Replace("\">", "");
827-
link = link.Replace(" rel=\"", "");
828-
link = link.Replace("\"", "");
829-
830-
return link;
831-
}
832-
833862
/// <summary>Reads and parses response headers (pagination etc.)</summary>
834863
/// <param name="conn">Response object.</param>
835864
private ListPaginated<T> ReadResponseHeadersOld<T>(IRestResponse restResponse, ListPaginated<T> listPaginated = null)

0 commit comments

Comments
 (0)