protected override JSBSchema BuildJsonSchema() { JSBString stringPart = new JSBString("MyTopPartString", "TopPart", enums: new List <string> { "Monster", "item", "Nusense" }); return(new JSBSchema("StringEnumAsATopPart", Description, topPart: stringPart)); }
public void BuildString_Enum_Simple() { string objectName = "StringName"; string description = "StringDescription"; List <string> enums = new List <string>() { "FTP", "Custom", "NotSoCustom", "Default" }; var varString = new JSBString(objectName, description, enums: enums); JsonSchema varSchema = varString.AsJsonSchema(); }
public void BuildString() { string objectName = "StringName"; string description = "StringDescription"; string defaultValue = "default"; bool isRequired = false; uint minLength = 4; uint maxLength = 8; string pattern = "fau"; var varString = new JSBString(objectName, description, minLength: minLength, maxLength: maxLength, pattern: pattern, defaultValue: defaultValue, isRequired: isRequired); JsonSchema varSchema = varString.AsJsonSchema(); }
public void BuildString_Enum() { string objectName = "StringName"; string description = "StringDescription"; string defaultValue = "default"; bool isRequired = false; uint minLength = 4; uint maxLength = 8; string pattern = "fau"; List <string> enums = new List <string>() { "FTP", "Custom", "NotSoCustom", "Default" }; var varString = new JSBString(objectName, description, minLength: minLength, maxLength: maxLength, pattern: pattern, defaultValue: defaultValue, isRequired: isRequired, enums: enums); JsonSchema varSchema = varString.AsJsonSchema(); }
private string GenerateDefaultIfExisting(IdentifierString key, JSBString jsonSchemaBuilderString) { return(string.IsNullOrWhiteSpace(jsonSchemaBuilderString.DefaultValue) ? string.Empty : $" = \"{jsonSchemaBuilderString.DefaultValue}\";"); }
private void GenerateOrdinaryString(CodeBuilder codeBuilder, IdentifierString key, JSBString jsonSchemaBuilderString) { GenerateComments(codeBuilder, key, jsonSchemaBuilderString); codeBuilder .L($"[JsonProperty(\"{TransformToCamelCase(key)}\")]") .L($"public string {TransformToTitleCase(key)} {{ get; set; }}{GenerateDefaultIfExisting(key, jsonSchemaBuilderString)}") .EmptyLine(); }
private void GenerateEnumString(CodeBuilder codeBuilder, IdentifierString key, JSBString jsonSchemaBuilderString, bool isDefinition) { codeBuilder .L($"public enum {TransformToTitleCase(key)}Enum") .L("{") .IndentIncrease(); for (int counter = 0; counter < jsonSchemaBuilderString.Enums.Count; counter += 1) { bool last = counter + 1 == jsonSchemaBuilderString.Enums.Count; string enumString = TransformToTitleCase(jsonSchemaBuilderString.Enums[counter]) + (last?"":","); codeBuilder .L(enumString); } codeBuilder .IndentDecrease() .L("}") .EmptyLine(); if (!isDefinition) { GenerateComments(codeBuilder, key, jsonSchemaBuilderString); codeBuilder .L($"[JsonProperty(\"{TransformToCamelCase(key)}\"), JsonConverter(typeof(StringEnumConverter))]") .L($"public {TransformToTitleCase(key)}Enum {TransformToTitleCase(key)} {{ get; set; }}{GenerateDefaultIfExisting(key, jsonSchemaBuilderString)}") .EmptyLine(); } }
private string MakeCorrectItemType(IJSBPart jsonSchemaBuilderPart) { switch (jsonSchemaBuilderPart.PartType) { case JSBPartType.Array: //TODO support multiple items return($"List<{MakeCorrectItemType((jsonSchemaBuilderPart as JSBArray).Items.First())}>"); case JSBPartType.Object: return(jsonSchemaBuilderPart.Name); case JSBPartType.Integer: return("long"); case JSBPartType.Number: return("double"); case JSBPartType.Boolean: return("bool"); case JSBPartType.String: JSBString jSBString = jsonSchemaBuilderPart as JSBString; if (jSBString.Enums.Count > 0) { return(jsonSchemaBuilderPart.Name + "Enum"); } return("string"); case JSBPartType.Date: return("DateTime"); case JSBPartType.DateTime: return("DateTime"); case JSBPartType.Email: return("Email"); case JSBPartType.Time: return("DateTime"); case JSBPartType.Schema: JSBSchema jSBSchema = jsonSchemaBuilderPart as JSBSchema; if (jSBSchema.TopPart != null) { return(MakeCorrectItemType(jSBSchema.TopPart)); } else { throw new NotImplementedException($"MakeCorrectItemType for Schema without a topPart has not been implemented"); } case JSBPartType.IriReference: JSBRef jsbRef = jsonSchemaBuilderPart as JSBRef; var pair = LookupReferencedPart(jsbRef); if (pair.refPart != null) { return(MakeCorrectItemType(pair.refPart)); } else if (pair.schemaValue != null) { return(MakeCorrectItemType(pair.schemaValue)); } else { throw new CodeGenerationException($"Could not find reference to {jsbRef.RelativeLocalFile}"); } default: throw new NotImplementedException($"MakeCorrectItemType for {jsonSchemaBuilderPart.PartType} has not been implemented"); } }
private void GenerateCodeForBuilderPart(CodeBuilder codeBuilder, IdentifierString key, IJSBPart value, Dictionary <string, IJSBPart> definitions = null, bool parentIsArray = false, bool isDefinition = false) { switch (value.PartType) { case JSBPartType.Array: JSBArray jsonSchemaBuilderArray = value as JSBArray; if (jsonSchemaBuilderArray.Enums != null && jsonSchemaBuilderArray.Enums.Count > 0) { GenerateEnumArray(codeBuilder, key, jsonSchemaBuilderArray); } else { GenerateOrdinaryArray(codeBuilder, key, jsonSchemaBuilderArray); } break; case JSBPartType.Boolean: JSBBoolean jsonSchemaBuilderBoolean = value as JSBBoolean; if (jsonSchemaBuilderBoolean.Enums != null && jsonSchemaBuilderBoolean.Enums.Count > 0) { GenerateEnumBoolean(codeBuilder, key, jsonSchemaBuilderBoolean); } else { if (!parentIsArray) { GenerateOrdinaryBoolaen(codeBuilder, key, jsonSchemaBuilderBoolean); } } break; case JSBPartType.Date: JSBDate jsonSchemaBuilderDate = value as JSBDate; if (jsonSchemaBuilderDate.Enums != null && jsonSchemaBuilderDate.Enums.Count > 0) { GenerateEnumDate(codeBuilder, key, jsonSchemaBuilderDate); } else { if (!parentIsArray) { GenerateOrdinaryDate(codeBuilder, key, jsonSchemaBuilderDate); } } break; case JSBPartType.DateTime: JSBDateTime jsonSchemaBuilderDateTime = value as JSBDateTime; if (jsonSchemaBuilderDateTime.Enums != null && jsonSchemaBuilderDateTime.Enums.Count > 0) { GenerateEnumDateTime(codeBuilder, key, jsonSchemaBuilderDateTime); } else { if (!parentIsArray) { GenerateOrdinaryDateTime(codeBuilder, key, jsonSchemaBuilderDateTime); } } break; case JSBPartType.Email: JSBEmail jsonSchemaBuilderEmail = value as JSBEmail; if (jsonSchemaBuilderEmail.Enums != null && jsonSchemaBuilderEmail.Enums.Count > 0) { GenerateEnumEmail(codeBuilder, key, jsonSchemaBuilderEmail); } else { GenerateOrdinaryEmail(codeBuilder, key, jsonSchemaBuilderEmail); } break; case JSBPartType.Integer: JSBInteger jsonSchemaBuilderInteger = value as JSBInteger; if (jsonSchemaBuilderInteger.Enums != null && jsonSchemaBuilderInteger.Enums.Count > 0) { GenerateEnumInteger(codeBuilder, key, jsonSchemaBuilderInteger); } else { if (!parentIsArray) { GenerateOrdinaryInteger(codeBuilder, key, jsonSchemaBuilderInteger); } } break; case JSBPartType.Number: JSBNumber jsonSchemaBuilderNumber = value as JSBNumber; if (jsonSchemaBuilderNumber.Enums != null && jsonSchemaBuilderNumber.Enums.Count > 0) { GenerateEnumNumber(codeBuilder, key, jsonSchemaBuilderNumber); } else { if (!parentIsArray) { GenerateOrdinaryNumber(codeBuilder, key, jsonSchemaBuilderNumber); } } break; case JSBPartType.Object: JSBObject jsonSchemaBuilderObject = value as JSBObject; if (jsonSchemaBuilderObject.Enums != null && jsonSchemaBuilderObject.Enums.Count > 0) { GenerateEnumObject(codeBuilder, key, jsonSchemaBuilderObject, definitions); } else { GenerateOrdinaryObject(codeBuilder, key, jsonSchemaBuilderObject, definitions, parentIsArray); } break; case JSBPartType.String: JSBString jsonSchemaBuilderString = value as JSBString; if (jsonSchemaBuilderString.Enums != null && jsonSchemaBuilderString.Enums.Count > 0) { GenerateEnumString(codeBuilder, key, jsonSchemaBuilderString, isDefinition); } else { GenerateOrdinaryString(codeBuilder, key, jsonSchemaBuilderString); } break; case JSBPartType.Time: JSBTime jsonSchemaBuilderTime = value as JSBTime; if (jsonSchemaBuilderTime.Enums != null && jsonSchemaBuilderTime.Enums.Count > 0) { GenerateEnumTime(codeBuilder, key, jsonSchemaBuilderTime); } else { GenerateOrdinaryTime(codeBuilder, key, jsonSchemaBuilderTime); } break; case JSBPartType.IriReference: //Reference cannot be an enum if (!parentIsArray) { JSBRef jsonSchemaBuilderUriReference = value as JSBRef; GenerateOrdinaryUriReference(codeBuilder, key, jsonSchemaBuilderUriReference); } break; default: codeBuilder.L($"throw new NotImplementedException(\"PartType {value.PartType} is not implemented\");"); break; } }
protected override JSBSchema BuildJsonSchema() { JSBString stringPart = new JSBString("MyTopPartString", "TopPart"); return(new JSBSchema("StringAsATopPart", Description, topPart: stringPart)); }