public static bool TryParse(string input, out RangeConditionHeaderValue parsedValue)
{
parsedValue = null;
var lexer = new Lexer(input);
var t = lexer.Scan();
bool is_weak;
if (t == Token.Type.Token)
{
if (lexer.GetStringValue(t) != "W")
{
DateTimeOffset date;
if (!Lexer.TryGetDateValue(input, out date))
{
return(false);
}
parsedValue = new RangeConditionHeaderValue(date);
return(true);
}
if (lexer.PeekChar() != '/')
{
return(false);
}
is_weak = true;
lexer.EatChar();
t = lexer.Scan();
}
else
{
is_weak = false;
}
if (t != Token.Type.QuotedString)
{
return(false);
}
if (lexer.Scan() != Token.Type.End)
{
return(false);
}
parsedValue = new RangeConditionHeaderValue(
new EntityTagHeaderValue()
{
Tag = lexer.GetStringValue(t),
IsWeak = is_weak
});
return(true);
}