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();
        }
Beispiel #5
0
 private string GenerateDefaultIfExisting(IdentifierString key, JSBString jsonSchemaBuilderString)
 {
     return(string.IsNullOrWhiteSpace(jsonSchemaBuilderString.DefaultValue) ? string.Empty : $" = \"{jsonSchemaBuilderString.DefaultValue}\";");
 }
Beispiel #6
0
        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();
        }
Beispiel #7
0
 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();
     }
 }
Beispiel #8
0
        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");
            }
        }
Beispiel #9
0
        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));
        }