/// <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": 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 && simpleType.Name != "string" && simpleType.Name != "namespace") result += '?'; return result; }