/// <summary> /// Tries to remove formatting specific to this parser's expected type. /// </summary> /// <param name="text">The text to remove formatting from.</param> /// <returns>Whether or not the expected formatting was found and succesfully removed.</returns> internal virtual bool TryRemoveFormatting(ref string text) { if (this.prefix != null) { if (!UriParserHelper.TryRemovePrefix(this.prefix, ref text)) { return(false); } } bool shouldBeQuoted = this.prefix != null || ValueOfTypeCanContainQuotes(this.expectedType); if (shouldBeQuoted && !UriParserHelper.TryRemoveQuotes(ref text)) { return(false); } if (this.suffix != null) { // we need to try to remove the literal even if it isn't required. if (!TryRemoveLiteralSuffix(this.suffix, ref text) && this.suffixRequired) { return(false); } } return(true); }
/// <summary> /// Try to parse the given text to a Geometry object. /// </summary> /// <param name="text">Text to parse.</param> /// <param name="targetValue">Geometry to return.</param> /// <param name="parsingFailureReasonException">The detailed reason of parsing error.</param> /// <returns>True if succeeds, false if not.</returns> private static bool TryUriStringToGeometry(string text, out Geometry targetValue, out UriLiteralParsingException parsingFailureReasonException) { parsingFailureReasonException = null; if (!UriParserHelper.TryRemoveLiteralPrefix(ExpressionConstants.LiteralPrefixGeometry, ref text)) { targetValue = default(Geometry); return(false); } if (!UriParserHelper.TryRemoveQuotes(ref text)) { targetValue = default(Geometry); return(false); } try { targetValue = LiteralUtils.ParseGeometry(text); return(true); } catch (ParseErrorException e) { targetValue = default(Geometry); parsingFailureReasonException = new UriLiteralParsingException(e.Message); return(false); } }
/// <summary> /// Converts a string to a Duration value. /// </summary> /// <param name="text">String text to convert.</param> /// <param name="targetValue">After invocation, converted value.</param> /// <returns>true if the value was converted; false otherwise.</returns> /// <remarks>Copy of WebConvert.TryKeyStringToTime.</remarks> private static bool TryUriStringToDuration(string text, out TimeSpan targetValue) { if (!UriParserHelper.TryRemoveLiteralPrefix(ExpressionConstants.LiteralPrefixDuration, ref text)) { targetValue = default(TimeSpan); return(false); } if (!UriParserHelper.TryRemoveQuotes(ref text)) { targetValue = default(TimeSpan); return(false); } try { targetValue = EdmValueParser.ParseDuration(text); return(true); } catch (FormatException) { targetValue = default(TimeSpan); return(false); } }
/// <summary> /// Converts a string to a byte[] value. /// </summary> /// <param name="text">String text to convert.</param> /// <param name="targetValue">After invocation, converted value.</param> /// <returns>true if the value was converted; false otherwise.</returns> /// <remarks>Copy of WebConvert.TryKeyStringToByteArray.</remarks> private static bool TryUriStringToByteArray(string text, out byte[] targetValue) { Debug.Assert(text != null, "text != null"); if (!UriParserHelper.TryRemoveLiteralPrefix(ExpressionConstants.LiteralPrefixBinary, ref text)) { targetValue = null; return(false); } if (!UriParserHelper.TryRemoveQuotes(ref text)) { targetValue = null; return(false); } try { targetValue = Convert.FromBase64String(text); } catch (FormatException) { targetValue = null; return(false); } return(true); }
internal static bool TryBindIdentifier(string identifier, IEdmEnumTypeReference typeReference, IEdmModel modelWhenNoTypeReference, out QueryNode boundEnum) { boundEnum = null; string text = identifier; // parse the string, e.g., NS.Color'Green' // get type information, and also convert Green into an ODataEnumValue // find the first ', before that, it is namespace.type int indexOfSingleQuote = text.IndexOf('\''); if (indexOfSingleQuote < 0) { return(false); } string namespaceAndType = text.Substring(0, indexOfSingleQuote); Debug.Assert((typeReference == null) || (modelWhenNoTypeReference == null), "((typeReference == null) || (modelWhenNoTypeReference == null)"); // validate typeReference but allow type name not found in model for delayed throwing. if ((typeReference != null) && !string.Equals(namespaceAndType, typeReference.FullName())) { return(false); } // get the type IEdmEnumType enumType = typeReference != null ? (IEdmEnumType)typeReference.Definition : UriEdmHelpers.FindEnumTypeFromModel(modelWhenNoTypeReference, namespaceAndType); if (enumType == null) { return(false); } // now, find out the value UriParserHelper.TryRemovePrefix(namespaceAndType, ref text); UriParserHelper.TryRemoveQuotes(ref text); // parse string or int value to edm enum value string enumValueString = text; ODataEnumValue enumValue; if (!TryParseEnum(enumType, enumValueString, out enumValue)) { return(false); } // create an enum node, enclosing an odata enum value IEdmEnumTypeReference enumTypeReference = typeReference ?? new EdmEnumTypeReference(enumType, false); boundEnum = new ConstantNode(enumValue, identifier, enumTypeReference); return(true); }
/// <summary> /// Tries to remove formatting specific to this parser's expected type. /// </summary> /// <param name="text">The text to remove formatting from.</param> /// <returns> /// Whether or not the expected formatting was found and succesfully removed. /// </returns> internal override bool TryRemoveFormatting(ref string text) { if (!UriParserHelper.TryRemovePrefix(ExpressionConstants.LiteralPrefixBinary, ref text)) { return(false); } if (!UriParserHelper.TryRemoveQuotes(ref text)) { return(false); } return(true); }
public void TryRemoveQuotesTest() { string test = "' '"; Assert.True(UriParserHelper.TryRemoveQuotes(ref test)); Assert.Equal(test, " "); test = "invalid"; Assert.False(UriParserHelper.TryRemoveQuotes(ref test)); Assert.Equal(test, "invalid"); test = "'invalid"; Assert.False(UriParserHelper.TryRemoveQuotes(ref test)); Assert.Equal(test, "'invalid"); }
public void TryRemoveQuotesTest() { string test = "' '"; UriParserHelper.TryRemoveQuotes(ref test).Should().BeTrue(); test.Should().Be(" "); test = "invalid"; UriParserHelper.TryRemoveQuotes(ref test).Should().BeFalse(); test.Should().Be("invalid"); test = "'invalid"; UriParserHelper.TryRemoveQuotes(ref test).Should().BeFalse(); test.Should().Be("'invalid"); }
/// <summary> /// Tries to remove formatting specific to this parser's expected type. /// </summary> /// <param name="text">The text to remove formatting from.</param> /// <returns> /// Whether or not the expected formatting was found and succesfully removed. /// </returns> internal override bool TryRemoveFormatting(ref string text) { return(UriParserHelper.TryRemoveQuotes(ref text)); }