/// <summary> /// Returns an expression that converts to a <see cref="SimpleParameterType"/>, /// using <see cref="LinqToWiki.Internals.ValueParser"/>. /// </summary> private static ExpressionSyntax CreateSimpleConverter( SimpleParameterType simpleType, string propertyName, ExpressionSyntax value, ExpressionSyntax wiki) { if (simpleType.Name == "namespace") { return(SyntaxEx.Invocation(SyntaxEx.MemberAccess("ValueParser", "ParseNamespace"), value, wiki)); } string typeName; switch (simpleType.Name) { case "string": case "user": typeName = "String"; break; case "timestamp": typeName = "DateTime"; break; case "boolean": typeName = "Boolean"; break; case "integer": typeName = propertyName.EndsWith("id") ? "Int64" : "Int32"; break; default: throw new InvalidOperationException(string.Format("Unknown type {0}", simpleType.Name)); } return(SyntaxEx.Invocation(SyntaxEx.MemberAccess("ValueParser", "Parse" + typeName), value)); }
/// <summary> /// Returns a source code type name for the given <see cref="SimpleParameterType"/>. /// </summary> private static string GetSimpleTypeName( SimpleParameterType simpleType, string propertyName, bool multi, bool nullable, bool useItemOrCollection) { string result; switch (simpleType.Name) { case "string": case "user": case "text": case "password": result = "string"; break; case "timestamp": result = "DateTime"; break; case "namespace": result = "Namespace"; break; case "boolean": result = "bool"; break; case "integer": result = propertyName.EndsWith("id") ? "long" : "int"; break; case "upload": return("System.IO.Stream"); default: throw new InvalidOperationException(string.Format("Unknown type {0}", simpleType.Name)); } if (multi) { result = string.Format(useItemOrCollection ? "ItemOrCollection<{0}>" : "IEnumerable<{0}>", result); } else if (nullable && result != "string" && result != "Namespace") { result += '?'; } return(result); }