本文整理汇总了C#中System.Text.StringBuilderWrapper.UnIndent方法的典型用法代码示例。如果您正苦于以下问题:C# StringBuilderWrapper.UnIndent方法的具体用法?C# StringBuilderWrapper.UnIndent怎么用?C# StringBuilderWrapper.UnIndent使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.Text.StringBuilderWrapper
的用法示例。
在下文中一共展示了StringBuilderWrapper.UnIndent方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: AppendType
private string AppendType(ref StringBuilderWrapper sb, MetadataType type, string lastNS,
CreateTypeOptions options)
{
sb = sb.Indent();
sb.AppendLine();
AppendComments(sb, type.Description);
if (type.Routes != null)
{
AppendAttributes(sb, type.Routes.ConvertAll(x => x.ToMetadataAttribute()));
}
AppendAttributes(sb, type.Attributes);
AppendDataContract(sb, type.DataContract);
if (type.IsEnum.GetValueOrDefault())
{
sb.AppendLine("enum {0}".Fmt(Type(type.Name, type.GenericArgs)));
sb.AppendLine("{");
sb = sb.Indent();
if (type.EnumNames != null)
{
for (var i = 0; i < type.EnumNames.Count; i++)
{
var name = type.EnumNames[i];
var value = type.EnumValues != null ? type.EnumValues[i] : null;
sb.AppendLine(value == null
? "{0},".Fmt(name.PropertyStyle())
: "{0} = {1},".Fmt(name.PropertyStyle(), value));
}
}
sb = sb.UnIndent();
sb.AppendLine("}");
}
else
{
var extends = new List<string>();
//: BaseClass, Interfaces
if (type.Inherits != null)
extends.Add(Type(type.Inherits).InheritedType());
if (options.ImplementsFn != null)
{
var implStr = options.ImplementsFn();
if (!string.IsNullOrEmpty(implStr))
extends.Add(implStr);
}
var extend = extends.Count > 0
? " extends " + (string.Join(", ", extends.ToArray()))
: "";
sb.AppendLine("interface {0}{1}".Fmt(Type(type.Name, type.GenericArgs), extend));
sb.AppendLine("{");
sb = sb.Indent();
var addVersionInfo = Config.AddImplicitVersion != null && options.IsRequest;
if (addVersionInfo)
{
sb.AppendLine("{0}?: number; //{1}".Fmt("Version".PropertyStyle(), Config.AddImplicitVersion));
}
AddProperties(sb, type,
includeResponseStatus: Config.AddResponseStatus && options.IsResponse
&& type.Properties.Safe().All(x => x.Name != typeof(ResponseStatus).Name));
sb = sb.UnIndent();
sb.AppendLine("}");
}
sb = sb.UnIndent();
return lastNS;
}
示例2: GetCode
//.........这里部分代码省略.........
allTypes.AddRange(responseTypes);
allTypes.AddRange(requestTypes);
allTypes.RemoveAll(x => x.IgnoreType(Config));
allTypes = FilterTypes(allTypes);
//TypeScript doesn't support reusing same type name with different generic airity
var conflictPartialNames = allTypes.Map(x => x.Name).Distinct()
.GroupBy(g => g.LeftPart('`'))
.Where(g => g.Count() > 1)
.Select(g => g.Key)
.ToList();
this.conflictTypeNames = allTypes
.Where(x => conflictPartialNames.Any(name => x.Name.StartsWith(name)))
.Map(x => x.Name);
defaultImports.Each(x => sb.AppendLine("import {0};".Fmt(x)));
if (!string.IsNullOrEmpty(globalNamespace))
{
var moduleDef = Config.ExportAsTypes ? "" : "declare ";
sb.AppendLine();
sb.AppendLine("{0}module {1}".Fmt(moduleDef, globalNamespace.SafeToken()));
sb.AppendLine("{");
sb = sb.Indent();
}
//ServiceStack core interfaces
foreach (var type in allTypes)
{
var fullTypeName = type.GetFullName();
if (requestTypes.Contains(type))
{
if (!existingTypes.Contains(fullTypeName))
{
MetadataType response = null;
MetadataOperationType operation;
if (requestTypesMap.TryGetValue(type, out operation))
{
response = operation.Response;
}
lastNS = AppendType(ref sb, type, lastNS,
new CreateTypeOptions
{
ImplementsFn = () =>
{
if (!Config.AddReturnMarker
&& !type.ReturnVoidMarker
&& type.ReturnMarkerTypeName == null)
return null;
if (type.ReturnVoidMarker)
return "IReturnVoid";
if (type.ReturnMarkerTypeName != null)
return Type("IReturn`1", new[] { Type(type.ReturnMarkerTypeName).InDeclarationType() });
return response != null
? Type("IReturn`1", new[] { Type(response.Name, response.GenericArgs).InDeclarationType() })
: null;
},
IsRequest = true,
});
existingTypes.Add(fullTypeName);
}
}
else if (responseTypes.Contains(type))
{
if (!existingTypes.Contains(fullTypeName)
&& !Config.IgnoreTypesInNamespaces.Contains(type.Namespace))
{
lastNS = AppendType(ref sb, type, lastNS,
new CreateTypeOptions
{
IsResponse = true,
});
existingTypes.Add(fullTypeName);
}
}
else if (types.Contains(type) && !existingTypes.Contains(fullTypeName))
{
lastNS = AppendType(ref sb, type, lastNS,
new CreateTypeOptions { IsType = true });
existingTypes.Add(fullTypeName);
}
}
if (!string.IsNullOrEmpty(globalNamespace))
{
sb = sb.UnIndent();
sb.AppendLine();
sb.AppendLine("}");
}
return StringBuilderCache.ReturnAndFree(sbInner);
}
示例3: AppendType
private string AppendType(ref StringBuilderWrapper sb, MetadataType type, string lastNS,
CreateTypeOptions options)
{
sb.AppendLine();
AppendComments(sb, type.Description);
if (type.Routes != null)
{
AppendAttributes(sb, type.Routes.ConvertAll(x => x.ToMetadataAttribute()));
}
AppendAttributes(sb, type.Attributes);
AppendDataContract(sb, type.DataContract);
if (type.IsEnum.GetValueOrDefault())
{
if (type.IsEnumInt.GetValueOrDefault() || type.EnumNames.IsEmpty())
{
var typeDeclaration = !Config.ExportAsTypes
? "enum"
: "export enum";
sb.AppendLine("{0} {1}".Fmt(typeDeclaration, Type(type.Name, type.GenericArgs)));
sb.AppendLine("{");
sb = sb.Indent();
if (type.EnumNames != null)
{
for (var i = 0; i < type.EnumNames.Count; i++)
{
var name = type.EnumNames[i];
var value = type.EnumValues != null ? type.EnumValues[i] : null;
sb.AppendLine(value == null //Enum Value's are not impacted by JS Style
? "{0},".Fmt(name)
: "{0} = {1},".Fmt(name, value));
}
}
sb = sb.UnIndent();
sb.AppendLine("}");
}
else
{
var sbType = StringBuilderCache.Allocate();
var typeDeclaration = !Config.ExportAsTypes
? "type"
: "export type";
sbType.Append("{0} {1} = ".Fmt(typeDeclaration, Type(type.Name, type.GenericArgs)));
for (var i = 0; i < type.EnumNames.Count; i++)
{
if (i > 0)
sbType.Append(" | ");
sbType.Append('"').Append(type.EnumNames[i]).Append('"');
}
sbType.Append(";");
sb.AppendLine(StringBuilderCache.ReturnAndFree(sbType));
}
}
else
{
var extends = new List<string>();
//: BaseClass, Interfaces
if (type.Inherits != null)
extends.Add(Type(type.Inherits).InDeclarationType());
string responseTypeExpression = null;
var interfaces = new List<string>();
var implStr = options.ImplementsFn?.Invoke();
if (!string.IsNullOrEmpty(implStr))
{
interfaces.Add(implStr);
if (implStr.StartsWith("IReturn<"))
{
var types = implStr.RightPart('<');
var returnType = types.Substring(0, types.Length - 1);
if (returnType == "any")
returnType = "Object";
// This is to avoid invalid syntax such as "return new string()"
string replaceReturnType;
if (primitiveDefaultValues.TryGetValue(returnType, out replaceReturnType))
returnType = replaceReturnType;
responseTypeExpression = replaceReturnType == null ?
"createResponse() {{ return new {0}(); }}".Fmt(returnType) :
"createResponse() {{ return {0}; }}".Fmt(returnType);
}
else if (implStr == "IReturnVoid")
{
responseTypeExpression = "createResponse() {}";
}
//.........这里部分代码省略.........
示例4: AddTypeExtension
private void AddTypeExtension(ref StringBuilderWrapper sbExt, MetadataType type, bool initCollections)
{
var typeName = Type(type.Name, type.GenericArgs);
var typeNameOnly = typeName.SplitOnFirst('<')[0];
sbExt.AppendLine();
sbExt.AppendLine("extension {0} : JsonSerializable".Fmt(typeNameOnly));
sbExt.AppendLine("{");
sbExt = sbExt.Indent();
//func typeConfig()
sbExt.AppendLine("public class func typeConfig() -> JsConfigType<{0}>".Fmt(typeName));
sbExt.AppendLine("{");
sbExt = sbExt.Indent();
sbExt.AppendLine(
"return JsConfig.typeConfig() ?? JsConfig.configure(JsConfigType<{0}>(".Fmt(typeName));
sbExt = sbExt.Indent();
sbExt.AppendLine("writers: [");
sbExt = sbExt.Indent();
foreach (var prop in type.Properties.Safe())
{
var isOptional = !(initCollections
&& (prop.IsArray()
|| (!prop.GenericArgs.IsEmpty()
&& (ArrayTypes.Contains(prop.Type) || DictionaryTypes.Contains(prop.Type)))
));
var fn = isOptional ? "setOptionalValue" : "setValue";
sbExt.AppendLine("(\"{1}\", {{ (x:{0}, map:NSDictionary) in {2}(&x.{1}, map, \"{1}\") }}),".Fmt(
typeName, prop.Name.SafeToken().PropertyStyle(), fn));
}
sbExt = sbExt.UnIndent();
sbExt.AppendLine("],");
sbExt.AppendLine("readers: [");
sbExt = sbExt.Indent();
foreach (var prop in type.Properties.Safe())
{
sbExt.AppendLine("(\"{1}\", {{ (x:{0}) in x.{1} as Any }}),".Fmt(
typeName,
prop.Name.SafeToken().PropertyStyle()));
}
sbExt = sbExt.UnIndent();
sbExt.AppendLine("]");
sbExt = sbExt.UnIndent();
sbExt.AppendLine("))");
sbExt = sbExt.UnIndent();
sbExt.AppendLine("}");
//toJson()
sbExt.AppendLine();
sbExt.AppendLine("public func toJson() -> String");
sbExt.AppendLine("{");
sbExt = sbExt.Indent();
sbExt.AppendLine("return serializeToJson(self, {0}.typeConfig())".Fmt(typeName));
sbExt = sbExt.UnIndent();
sbExt.AppendLine("}");
//fromDictionary()
sbExt.AppendLine();
sbExt.AppendLine("public class func fromDictionary(map:NSDictionary) -> {0}".Fmt(typeName));
sbExt.AppendLine("{");
sbExt = sbExt.Indent();
sbExt.AppendLine("return populate({0}(), map, {0}.typeConfig())".Fmt(typeName));
sbExt = sbExt.UnIndent();
sbExt.AppendLine("}");
//fromJson()
sbExt.AppendLine();
sbExt.AppendLine("public class func fromJson(json:String) -> {0}".Fmt(typeName));
sbExt.AppendLine("{");
sbExt = sbExt.Indent();
sbExt.AppendLine("return populate({0}(), json, {0}.typeConfig())".Fmt(typeName));
sbExt = sbExt.UnIndent();
sbExt.AppendLine("}");
sbExt = sbExt.UnIndent();
sbExt.AppendLine("}");
}
示例5: AppendType
private string AppendType(ref StringBuilderWrapper sb, MetadataType type, string lastNS,
CreateTypeOptions options)
{
if (type == null || (type.Namespace != null && type.Namespace.StartsWith("System")))
return lastNS;
sb = sb.Indent();
sb.AppendLine();
AppendComments(sb, type.Description);
if (type.Routes != null)
{
AppendAttributes(sb, type.Routes.ConvertAll(x => x.ToMetadataAttribute()));
}
AppendAttributes(sb, type.Attributes);
AppendDataContract(sb, type.DataContract);
if (type.IsEnum.GetValueOrDefault())
{
sb.AppendLine("type {0} =".Fmt(Type(type.Name, type.GenericArgs)));
sb = sb.Indent();
if (type.EnumNames != null)
{
for (var i = 0; i < type.EnumNames.Count; i++)
{
var name = type.EnumNames[i];
var value = type.EnumValues != null ? type.EnumValues[i] : i.ToString();
sb.AppendLine("| {0} = {1}".Fmt(name, value));
}
}
sb = sb.UnIndent();
}
else
{
//sb.AppendLine("[<CLIMutable>]"); // only for Record Types
sb.AppendLine("[<AllowNullLiteral>]");
sb.AppendLine("type {0}() = ".Fmt(Type(type.Name, type.GenericArgs)));
sb = sb.Indent();
var startLen = sb.Length;
//: BaseClass, Interfaces
if (type.Inherits != null)
sb.AppendLine("inherit {0}()".Fmt(Type(type.Inherits)));
if (options.ImplementsFn != null)
{
var implStr = options.ImplementsFn();
if (!string.IsNullOrEmpty(implStr))
sb.AppendLine("interface {0}".Fmt(implStr));
}
var makeExtensible = Config.MakeDataContractsExtensible && type.Inherits == null;
if (makeExtensible)
{
sb.AppendLine("interface IExtensibleDataObject with");
sb.AppendLine(" member val ExtensionData:ExtensionDataObject = null with get, set");
sb.AppendLine("end");
}
var addVersionInfo = Config.AddImplicitVersion != null && options.IsOperation;
if (addVersionInfo)
{
sb.AppendLine("member val Version:int = {0} with get, set".Fmt(Config.AddImplicitVersion));
}
AddProperties(sb, type);
if (sb.Length == startLen)
sb.AppendLine("class end");
sb = sb.UnIndent();
}
sb = sb.UnIndent();
return lastNS;
}
示例6: AppendType
private string AppendType(ref StringBuilderWrapper sb, ref StringBuilderWrapper sbExt, MetadataType type, string lastNS,
CreateTypeOptions options)
{
//sb = sb.Indent();
var hasGenericBaseType = type.Inherits != null && !type.Inherits.GenericArgs.IsEmpty();
if (Config.ExcludeGenericBaseTypes && hasGenericBaseType)
{
sb.AppendLine("//Excluded {0} : {1}<{2}>".Fmt(type.Name, type.Inherits.Name.SplitOnFirst('`')[0], string.Join(",", type.Inherits.GenericArgs)));
return lastNS;
}
sb.AppendLine();
AppendComments(sb, type.Description);
if (type.Routes != null)
{
AppendAttributes(sb, type.Routes.ConvertAll(x => x.ToMetadataAttribute()));
}
AppendAttributes(sb, type.Attributes);
AppendDataContract(sb, type.DataContract);
if (type.IsEnum.GetValueOrDefault())
{
sb.AppendLine("public enum {0} : Int".Fmt(Type(type.Name, type.GenericArgs)));
sb.AppendLine("{");
sb = sb.Indent();
if (type.EnumNames != null)
{
for (var i = 0; i < type.EnumNames.Count; i++)
{
var name = type.EnumNames[i];
var value = type.EnumValues != null ? type.EnumValues[i] : null;
sb.AppendLine(value == null
? "case {0}".Fmt(name)
: "case {0} = {1}".Fmt(name, value));
}
}
sb = sb.UnIndent();
sb.AppendLine("}");
AddEnumExtension(ref sbExt, type);
}
else
{
var defType = "class";
var typeName = Type(type.Name, type.GenericArgs).AddGenericConstraints();
var extends = new List<string>();
//: BaseClass, Interfaces
if (type.Inherits != null)
{
var baseType = Type(type.Inherits).InheritedType();
//Swift requires re-declaring base type generics definition on super type
var genericDefPos = baseType.IndexOf("<");
if (genericDefPos >= 0)
{
//Need to declare BaseType is JsonSerializable
var subBaseType = baseType.Substring(genericDefPos)
.AddGenericConstraints();
typeName += subBaseType;
}
extends.Add(baseType);
}
else if (Config.BaseClass != null && !type.IsInterface())
{
extends.Add(Config.BaseClass);
}
var typeAliases = new List<string>();
if (options.ImplementsFn != null)
{
//Swift doesn't support Generic Interfaces like IReturn<T>
//Converting them into protocols with typealiases instead
ExtractTypeAliases(options, typeAliases, extends, ref sbExt);
if (!type.Implements.IsEmpty())
type.Implements.Each(x => extends.Add(Type(x)));
}
if (type.IsInterface())
{
defType = "protocol";
//Extract Protocol Arguments into different typealiases
if (!type.GenericArgs.IsEmpty())
{
typeName = Type(type.Name, null);
foreach (var arg in type.GenericArgs)
{
typeAliases.Add("public typealias {0} = {0}".Fmt(arg));
}
}
}
//.........这里部分代码省略.........
示例7: AddEnumExtension
private void AddEnumExtension(ref StringBuilderWrapper sbExt, MetadataType type)
{
if (type.EnumNames == null) return;
sbExt.AppendLine();
var typeName = Type(type.Name, type.GenericArgs);
sbExt.AppendLine("extension {0} : StringSerializable".Fmt(typeName));
sbExt.AppendLine("{");
sbExt = sbExt.Indent();
sbExt.AppendLine("public static var typeName:String {{ return \"{0}\" }}".Fmt(typeName));
//toJson()
sbExt.AppendLine("public func toJson() -> String {");
sbExt = sbExt.Indent();
sbExt.AppendLine("return jsonStringRaw(toString())");
sbExt = sbExt.UnIndent();
sbExt.AppendLine("}");
//toString()
sbExt.AppendLine("public func toString() -> String {");
sbExt = sbExt.Indent();
sbExt.AppendLine("switch self {");
foreach (var name in type.EnumNames)
{
sbExt.AppendLine("case .{0}: return \"{0}\"".Fmt(name));
}
sbExt.AppendLine("}");
sbExt = sbExt.UnIndent();
sbExt.AppendLine("}");
//fromString()
sbExt.AppendLine("public static func fromString(strValue:String) -> {0}? {{".Fmt(typeName));
sbExt = sbExt.Indent();
sbExt.AppendLine("switch strValue {");
foreach (var name in type.EnumNames)
{
sbExt.AppendLine("case \"{0}\": return .{0}".Fmt(name));
}
sbExt.AppendLine("default: return nil");
sbExt.AppendLine("}");
sbExt = sbExt.UnIndent();
sbExt.AppendLine("}");
//fromObject()
sbExt.AppendLine("public static func fromObject(any:AnyObject) -> {0}? {{".Fmt(typeName));
sbExt = sbExt.Indent();
sbExt.AppendLine("switch any {");
sbExt.AppendLine("case let i as Int: return {0}(rawValue: i)".Fmt(typeName));
sbExt.AppendLine("case let s as String: return fromString(s)");
sbExt.AppendLine("default: return nil");
sbExt.AppendLine("}");
sbExt = sbExt.UnIndent();
sbExt.AppendLine("}");
sbExt = sbExt.UnIndent();
sbExt.AppendLine("}");
}
示例8: AppendType
private string AppendType(ref StringBuilderWrapper sb, MetadataType type, string lastNS,
CreateTypeOptions options)
{
sb.AppendLine();
AppendComments(sb, type.Description);
if (type.Routes != null)
{
AppendAttributes(sb, type.Routes.ConvertAll(x => x.ToMetadataAttribute()));
}
AppendAttributes(sb, type.Attributes);
AppendDataContract(sb, type.DataContract);
var typeName = Type(type.Name, type.GenericArgs);
if (type.IsEnum.GetValueOrDefault())
{
var hasIntValue = type.EnumNames.Count == (type.EnumValues != null ? type.EnumValues.Count : 0);
var enumConstructor = hasIntValue ? "(val value:Int)" : "";
sb.AppendLine("enum class {0}{1}".Fmt(typeName, enumConstructor));
sb.AppendLine("{");
sb = sb.Indent();
if (type.EnumNames != null)
{
for (var i = 0; i < type.EnumNames.Count; i++)
{
var name = type.EnumNames[i];
var value = hasIntValue ? type.EnumValues[i] : null;
var serializeAs = JsConfig.TreatEnumAsInteger || (type.Attributes.Safe().Any(x => x.Name == "Flags"))
? "@SerializedName(\"{0}\") ".Fmt(value)
: "";
sb.AppendLine(value == null
? "{0},".Fmt(name.ToPascalCase())
: serializeAs + "{0}({1}),".Fmt(name.ToPascalCase(), value));
}
//if (hasIntValue)
//{
// sb.AppendLine();
// sb.AppendLine("private final int value;");
// sb.AppendLine("{0}(final int intValue) {{ value = intValue; }}".Fmt(typeName));
// sb.AppendLine("public int getValue() { return value; }");
//}
}
sb = sb.UnIndent();
sb.AppendLine("}");
}
else
{
var defType = type.IsInterface()
? "interface"
: "class";
var extends = new List<string>();
//: BaseClass, Interfaces
if (type.Inherits != null)
extends.Add(Type(type.Inherits).InheritedType());
string responseTypeExpression = null;
var interfaces = new List<string>();
if (options.ImplementsFn != null)
{
var implStr = options.ImplementsFn();
if (!string.IsNullOrEmpty(implStr))
{
interfaces.Add(implStr);
if (implStr.StartsWith("IReturn<"))
{
var parts = implStr.SplitOnFirst('<');
var returnType = parts[1].Substring(0, parts[1].Length - 1);
//Can't get .class from Generic Type definition
responseTypeExpression = returnType.Contains("<")
? "object : TypeToken<{0}>(){{}}.type".Fmt(returnType)
: "{0}::class.java".Fmt(returnType);
}
}
if (!type.Implements.IsEmpty())
{
foreach (var interfaceRef in type.Implements)
{
interfaces.Add(Type(interfaceRef));
}
}
}
var extend = extends.Count > 0
? " : " + extends[0] + "()"
: "";
if (interfaces.Count > 0)
extend += (extend.IsNullOrEmpty() ? " : " : ", ") + string.Join(", ", interfaces.ToArray());
//.........这里部分代码省略.........
示例9: AddTypeExtension
private void AddTypeExtension(ref StringBuilderWrapper sbExt, MetadataType type, bool initCollections)
{
//Swift doesn't support extensions on same protocol used by Base and Sub types
if (type.IsAbstract())
return;
var typeName = Type(type.Name, type.GenericArgs);
var typeNameOnly = typeName.SplitOnFirst('<')[0];
sbExt.AppendLine();
sbExt.AppendLine("extension {0} : JsonSerializable".Fmt(typeNameOnly));
sbExt.AppendLine("{");
sbExt = sbExt.Indent();
sbExt.AppendLine("public static var typeName:String {{ return \"{0}\" }}".Fmt(typeName));
//func typeConfig()
sbExt.AppendLine("public static func reflect() -> Type<{0}> {{".Fmt(typeName));
sbExt = sbExt.Indent();
sbExt.AppendLine(
"return TypeConfig.config() ?? TypeConfig.configure(Type<{0}>(".Fmt(typeName));
sbExt = sbExt.Indent();
sbExt.AppendLine("properties: [".Fmt(typeName));
sbExt = sbExt.Indent();
foreach (var prop in GetPropertes(type))
{
var propType = FindType(prop.Type, prop.TypeNamespace, prop.GenericArgs);
if (propType.IsInterface()
|| IgnorePropertyTypeNames.Contains(prop.Type)
|| IgnorePropertyNames.Contains(prop.Name))
continue;
var fnName = "property";
if (prop.IsArray() || ArrayTypes.Contains(prop.Type))
{
fnName = initCollections
? "arrayProperty"
: "optionalArrayProperty";
}
else if (DictionaryTypes.Contains(prop.Type))
{
fnName = initCollections
? "objectProperty"
: "optionalObjectProperty";
}
else
{
if (propType != null && !propType.IsEnum.GetValueOrDefault())
{
fnName = "optionalObjectProperty";
}
else
{
fnName = "optionalProperty";
}
}
sbExt.AppendLine("Type<{0}>.{1}(\"{2}\", get: {{ $0.{2} }}, set: {{ $0.{2} = $1 }}),".Fmt(
typeName, fnName, prop.Name.SafeToken().PropertyStyle()));
}
sbExt = sbExt.UnIndent();
sbExt.AppendLine("]))");
sbExt = sbExt.UnIndent();
sbExt = sbExt.UnIndent();
sbExt.AppendLine("}");
//toJson()
sbExt.AppendLine("public func toJson() -> String {");
sbExt = sbExt.Indent();
sbExt.AppendLine("return {0}.reflect().toJson(self)".Fmt(typeName));
sbExt = sbExt.UnIndent();
sbExt.AppendLine("}");
//fromJson()
sbExt.AppendLine("public static func fromJson(json:String) -> {0}? {{".Fmt(typeName));
sbExt = sbExt.Indent();
sbExt.AppendLine("return {0}.reflect().fromJson({0}(), json: json)".Fmt(typeName));
sbExt = sbExt.UnIndent();
sbExt.AppendLine("}");
//fromObject()
sbExt.AppendLine("public static func fromObject(any:AnyObject) -> {0}? {{".Fmt(typeName));
sbExt = sbExt.Indent();
sbExt.AppendLine("return {0}.reflect().fromObject({0}(), any:any)".Fmt(typeName));
sbExt = sbExt.UnIndent();
sbExt.AppendLine("}");
//toString()
sbExt.AppendLine("public func toString() -> String {");
sbExt = sbExt.Indent();
sbExt.AppendLine("return {0}.reflect().toString(self)".Fmt(typeName));
sbExt = sbExt.UnIndent();
sbExt.AppendLine("}");
//fromString()
//.........这里部分代码省略.........
示例10: AppendType
private string AppendType(ref StringBuilderWrapper sb, MetadataType type, string lastNS,
CreateTypeOptions options)
{
sb = sb.Indent();
sb.AppendLine();
AppendComments(sb, type.Description);
if (type.Routes != null)
{
AppendAttributes(sb, type.Routes.ConvertAll(x => x.ToMetadataAttribute()));
}
AppendAttributes(sb, type.Attributes);
AppendDataContract(sb, type.DataContract);
if (Config.AddGeneratedCodeAttributes)
{
sb.AppendLine("[<GeneratedCode(\"AddServiceStackReference\", \"{0}\")>]".Fmt(Env.VersionString));
}
if (type.IsEnum.GetValueOrDefault())
{
sb.AppendLine("type {0} =".Fmt(Type(type.Name, type.GenericArgs)));
sb = sb.Indent();
if (type.EnumNames != null)
{
for (var i = 0; i < type.EnumNames.Count; i++)
{
var name = type.EnumNames[i];
var value = type.EnumValues != null ? type.EnumValues[i] : i.ToString();
sb.AppendLine("| {0} = {1}".Fmt(name, value));
}
}
sb = sb.UnIndent();
}
else
{
//sb.AppendLine("[<CLIMutable>]"); // only for Record Types
var classCtor = type.IsInterface() ? "" : "()";
sb.AppendLine("[<AllowNullLiteral>]");
sb.AppendLine("type {0}{1} = ".Fmt(Type(type.Name, type.GenericArgs), classCtor));
sb = sb.Indent();
var startLen = sb.Length;
//: BaseClass, Interfaces
if (type.Inherits != null)
sb.AppendLine("inherit {0}()".Fmt(Type(type.Inherits)));
if (options.ImplementsFn != null)
{
var implStr = options.ImplementsFn();
if (!string.IsNullOrEmpty(implStr))
sb.AppendLine("interface {0}".Fmt(implStr));
}
if (!type.IsInterface())
{
var makeExtensible = Config.MakeDataContractsExtensible && type.Inherits == null;
if (makeExtensible)
{
sb.AppendLine("interface IExtensibleDataObject with");
sb.AppendLine(" member val ExtensionData:ExtensionDataObject = null with get, set");
sb.AppendLine("end");
}
var addVersionInfo = Config.AddImplicitVersion != null && options.IsRequest;
if (addVersionInfo)
{
sb.AppendLine("member val Version:int = {0} with get, set".Fmt(Config.AddImplicitVersion));
}
}
AddProperties(sb, type,
includeResponseStatus: Config.AddResponseStatus && options.IsResponse
&& type.Properties.Safe().All(x => x.Name != typeof(ResponseStatus).Name));
if (sb.Length == startLen)
sb.AppendLine(type.IsInterface() ? "interface end" : "class end");
sb = sb.UnIndent();
}
sb = sb.UnIndent();
return lastNS;
}
示例11: AppendType
private string AppendType(ref StringBuilderWrapper sb, MetadataType type, string lastNS, List<MetadataType> allTypes, CreateTypeOptions options)
{
if (type.IsNested.GetValueOrDefault() && !options.IsNestedType)
return lastNS;
var ns = Config.GlobalNamespace ?? type.Namespace;
if (ns != lastNS)
{
if (lastNS != null)
sb.AppendLine("End Namespace");
lastNS = ns;
sb.AppendLine();
sb.AppendLine("Namespace {0}".Fmt(ns.SafeToken()));
//sb.AppendLine("{");
}
sb = sb.Indent();
sb.AppendLine();
AppendComments(sb, type.Description);
if (type.Routes != null)
{
AppendAttributes(sb, type.Routes.ConvertAll(x => x.ToMetadataAttribute()));
}
AppendAttributes(sb, type.Attributes);
AppendDataContract(sb, type.DataContract);
if (type.IsEnum.GetValueOrDefault())
{
sb.AppendLine("Public Enum {0}".Fmt(Type(type.Name, type.GenericArgs)));
//sb.AppendLine("{");
sb = sb.Indent();
if (type.EnumNames != null)
{
for (var i = 0; i < type.EnumNames.Count; i++)
{
var name = type.EnumNames[i];
var value = type.EnumValues != null ? type.EnumValues[i] : null;
sb.AppendLine(value == null
? "{0}".Fmt(name)
: "{0} = {1}".Fmt(name, value));
}
}
sb = sb.UnIndent();
sb.AppendLine("End Enum");
}
else
{
var partial = Config.MakePartial && !type.IsInterface() ? "Partial " : "";
var defType = type.IsInterface() ? "Interface" : "Class";
sb.AppendLine("Public {0}{1} {2}".Fmt(partial, defType, Type(type.Name, type.GenericArgs)));
//: BaseClass, Interfaces
if (type.Inherits != null)
{
sb.AppendLine(" Inherits {0}".Fmt(Type(type.Inherits, includeNested: true)));
}
var implements = new List<string>();
if (options.ImplementsFn != null)
{
var implStr = options.ImplementsFn();
if (!string.IsNullOrEmpty(implStr))
implements.Add(implStr);
}
var makeExtensible = Config.MakeDataContractsExtensible && type.Inherits == null;
if (makeExtensible)
implements.Add("IExtensibleDataObject");
if (implements.Count > 0)
{
foreach (var x in implements)
{
sb.AppendLine(" Implements {0}".Fmt(x));
}
}
//sb.AppendLine("{");
sb = sb.Indent();
AddConstuctor(sb, type, options);
AddProperties(sb, type);
foreach (var innerTypeRef in type.InnerTypes.Safe())
{
var innerType = allTypes.FirstOrDefault(x => x.Name == innerTypeRef.Name);
if (innerType == null)
continue;
sb = sb.UnIndent();
AppendType(ref sb, innerType, lastNS, allTypes,
new CreateTypeOptions { IsNestedType = true });
sb = sb.Indent();
}
//.........这里部分代码省略.........
示例12: AppendType
private string AppendType(ref StringBuilderWrapper sb, MetadataType type, string lastNS, List<MetadataType> allTypes, CreateTypeOptions options)
{
if (type == null ||
(type.IsNested.GetValueOrDefault() && !options.IsNestedType) ||
(type.Namespace != null && type.Namespace.StartsWith("System")))
return lastNS;
if (type.Namespace != lastNS)
{
if (lastNS != null)
sb.AppendLine("}");
lastNS = type.Namespace;
sb.AppendLine();
sb.AppendLine("namespace {0}".Fmt(type.Namespace.SafeToken()));
sb.AppendLine("{");
}
sb = sb.Indent();
sb.AppendLine();
AppendComments(sb, type.Description);
if (type.Routes != null)
{
AppendAttributes(sb, type.Routes.ConvertAll(x => x.ToMetadataAttribute()));
}
AppendAttributes(sb, type.Attributes);
AppendDataContract(sb, type.DataContract);
if (type.IsEnum.GetValueOrDefault())
{
sb.AppendLine("public enum {0}".Fmt(Type(type.Name, type.GenericArgs)));
sb.AppendLine("{");
sb = sb.Indent();
if (type.EnumNames != null)
{
for (var i = 0; i < type.EnumNames.Count; i++)
{
var name = type.EnumNames[i];
var value = type.EnumValues != null ? type.EnumValues[i] : null;
sb.AppendLine(value == null
? "{0},".Fmt(name)
: "{0} = {1},".Fmt(name, value));
}
}
sb = sb.UnIndent();
sb.AppendLine("}");
}
else
{
var partial = Config.MakePartial ? "partial " : "";
sb.AppendLine("public {0}class {1}".Fmt(partial, Type(type.Name, type.GenericArgs)));
//: BaseClass, Interfaces
var inheritsList = new List<string>();
if (type.Inherits != null)
{
inheritsList.Add(Type(type.Inherits, includeNested:true));
}
if (options.ImplementsFn != null)
{
var implStr = options.ImplementsFn();
if (!string.IsNullOrEmpty(implStr))
inheritsList.Add(implStr);
}
var makeExtensible = Config.MakeDataContractsExtensible && type.Inherits == null;
if (makeExtensible)
inheritsList.Add("IExtensibleDataObject");
if (inheritsList.Count > 0)
sb.AppendLine(" : {0}".Fmt(string.Join(", ", inheritsList.ToArray())));
sb.AppendLine("{");
sb = sb.Indent();
AddConstuctor(sb, type, options);
AddProperties(sb, type);
foreach (var innerTypeRef in type.InnerTypes.Safe())
{
var innerType = allTypes.FirstOrDefault(x => x.Name == innerTypeRef.Name);
if (innerType == null)
continue;
sb = sb.UnIndent();
AppendType(ref sb, innerType, lastNS, allTypes,
new CreateTypeOptions { IsNestedType = true });
sb = sb.Indent();
}
sb = sb.UnIndent();
sb.AppendLine("}");
}
sb = sb.UnIndent();
return lastNS;
//.........这里部分代码省略.........
示例13: GetCode
public string GetCode(MetadataTypes metadata, IRequest request)
{
var namespaces = new HashSet<string>();
Config.DefaultNamespaces.Each(x => namespaces.Add(x));
var typeNamespaces = new HashSet<string>();
metadata.Types.Each(x => typeNamespaces.Add(x.Namespace));
metadata.Operations.Each(x => typeNamespaces.Add(x.Request.Namespace));
// Look first for shortest Namespace ending with `ServiceModel` convention, else shortest ns
var globalNamespace = Config.GlobalNamespace
?? typeNamespaces.Where(x => x.EndsWith("ServiceModel"))
.OrderBy(x => x).FirstOrDefault()
?? typeNamespaces.OrderBy(x => x).First();
Func<string, string> defaultValue = k =>
request.QueryString[k].IsNullOrEmpty() ? "//" : "";
var sb = new StringBuilderWrapper(new StringBuilder());
sb.AppendLine("/* Options:");
sb.AppendLine("Date: {0}".Fmt(DateTime.Now.ToString("s").Replace("T", " ")));
sb.AppendLine("Version: {0}".Fmt(metadata.Version));
sb.AppendLine("BaseUrl: {0}".Fmt(Config.BaseUrl));
sb.AppendLine();
sb.AppendLine("{0}AddServiceStackTypes: {1}".Fmt(defaultValue("AddServiceStackTypes"), Config.AddServiceStackTypes));
sb.AppendLine("{0}AddResponseStatus: {1}".Fmt(defaultValue("AddResponseStatus"), Config.AddResponseStatus));
sb.AppendLine("{0}AddImplicitVersion: {1}".Fmt(defaultValue("AddImplicitVersion"), Config.AddImplicitVersion));
sb.AppendLine("*/");
sb.AppendLine();
string lastNS = null;
var existingOps = new HashSet<string>();
var requestTypes = metadata.Operations.Select(x => x.Request).ToHashSet();
var requestTypesMap = metadata.Operations.ToSafeDictionary(x => x.Request);
var responseTypes = metadata.Operations
.Where(x => x.Response != null)
.Select(x => x.Response).ToHashSet();
var types = metadata.Types.ToHashSet();
var allTypes = new List<MetadataType>();
allTypes.AddRange(types);
allTypes.AddRange(responseTypes);
allTypes.AddRange(requestTypes);
if (Config.AddServiceStackTypes)
{
sb.AppendLine("declare module ServiceStack");
sb.AppendLine("{");
sb = sb.Indent();
sb.AppendLine("interface IReturnVoid {}");
sb.AppendLine("interface IReturn<T> {}");
sb = sb.UnIndent();
sb.AppendLine("}");
sb.AppendLine();
}
sb.AppendLine("declare module {0}".Fmt(globalNamespace.SafeToken()));
sb.AppendLine("{");
//ServiceStack core interfaces
foreach (var type in allTypes)
{
var fullTypeName = type.GetFullName();
if (requestTypes.Contains(type))
{
if (!existingOps.Contains(fullTypeName))
{
MetadataType response = null;
MetadataOperationType operation;
if (requestTypesMap.TryGetValue(type, out operation))
{
response = operation.Response;
}
lastNS = AppendType(ref sb, type, lastNS,
new CreateTypeOptions
{
ImplementsFn = () =>
{
if (!Config.AddReturnMarker
&& !type.ReturnVoidMarker
&& type.ReturnMarkerTypeName == null)
return null;
if (type.ReturnVoidMarker)
return "ServiceStack.IReturnVoid";
if (type.ReturnMarkerTypeName != null)
return Type("ServiceStack.IReturn`1", new[] { Type(type.ReturnMarkerTypeName) });
return response != null
? Type("ServiceStack.IReturn`1", new[] { Type(type.Name, type.GenericArgs) })
: null;
},
IsRequest = true,
});
//.........这里部分代码省略.........
示例14: AddEnumExtension
private void AddEnumExtension(ref StringBuilderWrapper sbExt, MetadataType type)
{
if (type.EnumNames == null) return;
sbExt.AppendLine();
sbExt.AppendLine("extension {0} : StringSerializable".Fmt(Type(type.Name, type.GenericArgs)));
sbExt.AppendLine("{");
sbExt = sbExt.Indent();
sbExt.AppendLine("public func toString() -> String");
sbExt.AppendLine("{");
sbExt = sbExt.Indent();
sbExt.AppendLine("switch self {");
foreach (var name in type.EnumNames)
{
sbExt.AppendLine("case .{0}: return \"{0}\"".Fmt(name.PropertyStyle()));
}
sbExt.AppendLine("}");
sbExt = sbExt.UnIndent();
sbExt.AppendLine("}");
sbExt.AppendLine();
sbExt.AppendLine("public static func fromString(strValue:String) -> {0}?".Fmt(Type(type.Name, type.GenericArgs)));
sbExt.AppendLine("{");
sbExt = sbExt.Indent();
sbExt.AppendLine("switch strValue {");
foreach (var name in type.EnumNames)
{
sbExt.AppendLine("case \"{0}\": return .{0}".Fmt(name.PropertyStyle()));
}
sbExt.AppendLine("default: return nil");
sbExt.AppendLine("}");
sbExt = sbExt.UnIndent();
sbExt.AppendLine("}");
sbExt = sbExt.UnIndent();
sbExt.AppendLine("}");
}
示例15: AppendType
private string AppendType(ref StringBuilderWrapper sb, MetadataType type, string lastNS, List<MetadataType> allTypes, CreateTypeOptions options)
{
if (type.IsNested.GetValueOrDefault() && !options.IsNestedType)
return lastNS;
var ns = Config.GlobalNamespace ?? type.Namespace;
if (ns != lastNS)
{
if (lastNS != null)
sb.AppendLine("}");
lastNS = ns;
sb.AppendLine();
sb.AppendLine("namespace {0}".Fmt(ns.SafeToken()));
sb.AppendLine("{");
}
sb = sb.Indent();
sb.AppendLine();
AppendComments(sb, type.Description);
if (type.Routes != null)
{
AppendAttributes(sb, type.Routes.ConvertAll(x => x.ToMetadataAttribute()));
}
AppendAttributes(sb, type.Attributes);
AppendDataContract(sb, type.DataContract);
if (Config.AddGeneratedCodeAttributes)
sb.AppendLine("[GeneratedCode(\"AddServiceStackReference\", \"{0}\")]".Fmt(Env.VersionString));
if (type.IsEnum.GetValueOrDefault())
{
sb.AppendLine("public enum {0}".Fmt(Type(type.Name, type.GenericArgs)));
sb.AppendLine("{");
sb = sb.Indent();
if (type.EnumNames != null)
{
for (var i = 0; i < type.EnumNames.Count; i++)
{
var name = type.EnumNames[i];
var value = type.EnumValues != null ? type.EnumValues[i] : null;
sb.AppendLine(value == null
? "{0},".Fmt(name)
: "{0} = {1},".Fmt(name, value));
}
}
sb = sb.UnIndent();
sb.AppendLine("}");
}
else
{
var partial = Config.MakePartial ? "partial " : "";
var defType = type.IsInterface() ? "interface" : "class";
sb.AppendLine("public {0}{1} {2}".Fmt(partial, defType, Type(type.Name, type.GenericArgs)));
//: BaseClass, Interfaces
var inheritsList = new List<string>();
if (type.Inherits != null)
{
inheritsList.Add(Type(type.Inherits, includeNested:true));
}
if (options.ImplementsFn != null)
{
var implStr = options.ImplementsFn();
if (!string.IsNullOrEmpty(implStr))
inheritsList.Add(implStr);
if (!type.Implements.IsEmpty())
type.Implements.Each(x => inheritsList.Add(Type(x)));
}
var makeExtensible = Config.MakeDataContractsExtensible && type.Inherits == null;
if (makeExtensible)
inheritsList.Add("IExtensibleDataObject");
if (inheritsList.Count > 0)
sb.AppendLine(" : {0}".Fmt(string.Join(", ", inheritsList.ToArray())));
sb.AppendLine("{");
sb = sb.Indent();
AddConstuctor(sb, type, options);
AddProperties(sb, type,
includeResponseStatus: Config.AddResponseStatus && options.IsResponse
&& type.Properties.Safe().All(x => x.Name != typeof(ResponseStatus).Name));
foreach (var innerTypeRef in type.InnerTypes.Safe())
{
var innerType = allTypes.FirstOrDefault(x => x.Name == innerTypeRef.Name);
if (innerType == null)
continue;
sb = sb.UnIndent();
AppendType(ref sb, innerType, lastNS, allTypes,
new CreateTypeOptions { IsNestedType = true });
sb = sb.Indent();
}
//.........这里部分代码省略.........