//
using System.Collections.Generic;
-using System.Linq;
namespace System.Net.Http.Headers
{
}
}
+ private NameValueWithParametersHeaderValue ()
+ : base ()
+ {
+ }
+
public ICollection<NameValueHeaderValue> Parameters {
get {
return parameters ?? (parameters = new List<NameValueHeaderValue> ());
if (source == null)
return false;
- return base.Equals (obj) && Enumerable.SequenceEqual (source.parameters, parameters);
+ return base.Equals (obj) && source.parameters.SequenceEqual (parameters);
}
public override int GetHashCode ()
throw new FormatException (input);
}
+ public override string ToString ()
+ {
+ if (parameters == null || parameters.Count == 0)
+ return base.ToString ();
+
+ return base.ToString () + CollectionExtensions.ToString (parameters);
+ }
+
public static bool TryParse (string input, out NameValueWithParametersHeaderValue parsedValue)
{
- throw new NotImplementedException ();
+ var lexer = new Lexer (input);
+ Token token;
+ if (TryParseElement (lexer, out parsedValue, out token) && token == Token.Type.End)
+ return true;
+
+ parsedValue = null;
+ return false;
+ }
+
+ internal static bool TryParse (string input, int minimalCount, out List<NameValueWithParametersHeaderValue> result)
+ {
+ return CollectionParser.TryParse (input, minimalCount, TryParseElement, out result);
+ }
+
+ static bool TryParseElement (Lexer lexer, out NameValueWithParametersHeaderValue parsedValue, out Token t)
+ {
+ parsedValue = null;
+
+ t = lexer.Scan ();
+ if (t != Token.Type.Token)
+ return false;
+
+ parsedValue = new NameValueWithParametersHeaderValue () {
+ Name = lexer.GetStringValue (t),
+ };
+
+ t = lexer.Scan ();
+ if (t == Token.Type.SeparatorEqual) {
+ t = lexer.Scan ();
+
+ if (t == Token.Type.Token || t == Token.Type.QuotedString) {
+ parsedValue.value = lexer.GetStringValue (t);
+ t = lexer.Scan ();
+ } else {
+ return false;
+ }
+ }
+
+ if (t == Token.Type.SeparatorSemicolon) {
+ List<NameValueHeaderValue> result;
+ if (!TryParseParameters (lexer, out result, out t))
+ return false;
+
+ parsedValue.parameters = result;
+ }
+
+ return true;
}
}
}