diff --git a/Unity/Assets/Json/Builders.meta b/Unity/Assets/Json/Builders.meta new file mode 100644 index 0000000..3caa246 --- /dev/null +++ b/Unity/Assets/Json/Builders.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 421f1a31845b41e583b2e79a92788f17 +timeCreated: 1769705709 \ No newline at end of file diff --git a/Unity/Assets/Json/Builders/ArrayBuilder.cs b/Unity/Assets/Json/Builders/ArrayBuilder.cs new file mode 100644 index 0000000..508b92f --- /dev/null +++ b/Unity/Assets/Json/Builders/ArrayBuilder.cs @@ -0,0 +1,32 @@ +using System; + +namespace NeuroSdk.Json.Builders +{ + public sealed class ArrayBuilder : SchemaBuilder> + where TItems : SchemaBuilder + { + public ArrayBuilder(Func> build) + { + Schema.Type = JsonSchemaType.Array; + Schema.Items = build(new JsonSchemaBuilders()).Build(); + } + + public ArrayBuilder MinItems(int value) + { + Schema.MinItems = value; + return this; + } + + public ArrayBuilder MaxItems(int value) + { + Schema.MaxItems = value; + return this; + } + + public ArrayBuilder UniqueItems(bool value = true) + { + Schema.UniqueItems = value; + return this; + } + } +} \ No newline at end of file diff --git a/Unity/Assets/Json/Builders/ArrayBuilder.cs.meta b/Unity/Assets/Json/Builders/ArrayBuilder.cs.meta new file mode 100644 index 0000000..a930d58 --- /dev/null +++ b/Unity/Assets/Json/Builders/ArrayBuilder.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0646c51c54f045bb8f72b78cdd60757e +timeCreated: 1769706057 \ No newline at end of file diff --git a/Unity/Assets/Json/Builders/BooleanBuilder.cs b/Unity/Assets/Json/Builders/BooleanBuilder.cs new file mode 100644 index 0000000..e6a14c5 --- /dev/null +++ b/Unity/Assets/Json/Builders/BooleanBuilder.cs @@ -0,0 +1,10 @@ +namespace NeuroSdk.Json.Builders +{ + public sealed class BooleanBuilder : PrimitiveBuilder + { + public BooleanBuilder() + { + Schema.Type = JsonSchemaType.Boolean; + } + } +} \ No newline at end of file diff --git a/Unity/Assets/Json/Builders/BooleanBuilder.cs.meta b/Unity/Assets/Json/Builders/BooleanBuilder.cs.meta new file mode 100644 index 0000000..9dc3be2 --- /dev/null +++ b/Unity/Assets/Json/Builders/BooleanBuilder.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2491c82c290d4be1980ed585300b8aa8 +timeCreated: 1769706451 \ No newline at end of file diff --git a/Unity/Assets/Json/Builders/FloatBuilder.cs b/Unity/Assets/Json/Builders/FloatBuilder.cs new file mode 100644 index 0000000..ecb33d2 --- /dev/null +++ b/Unity/Assets/Json/Builders/FloatBuilder.cs @@ -0,0 +1,10 @@ +namespace NeuroSdk.Json.Builders +{ + public sealed class FloatBuilder : NumberBuilder + { + public FloatBuilder() + { + Schema.Type = JsonSchemaType.Float; + } + } +} \ No newline at end of file diff --git a/Unity/Assets/Json/Builders/FloatBuilder.cs.meta b/Unity/Assets/Json/Builders/FloatBuilder.cs.meta new file mode 100644 index 0000000..17358f7 --- /dev/null +++ b/Unity/Assets/Json/Builders/FloatBuilder.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f5761a21033646438267a0a1c003c5d3 +timeCreated: 1769706422 \ No newline at end of file diff --git a/Unity/Assets/Json/Builders/IntegerBuilder.cs b/Unity/Assets/Json/Builders/IntegerBuilder.cs new file mode 100644 index 0000000..8ab3168 --- /dev/null +++ b/Unity/Assets/Json/Builders/IntegerBuilder.cs @@ -0,0 +1,10 @@ +namespace NeuroSdk.Json.Builders +{ + public sealed class IntegerBuilder : NumberBuilder + { + public IntegerBuilder() + { + Schema.Type = JsonSchemaType.Integer; + } + } +} \ No newline at end of file diff --git a/Unity/Assets/Json/Builders/IntegerBuilder.cs.meta b/Unity/Assets/Json/Builders/IntegerBuilder.cs.meta new file mode 100644 index 0000000..9d1f4d0 --- /dev/null +++ b/Unity/Assets/Json/Builders/IntegerBuilder.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3c5b3ec78e004a918d35fecc70e9e34d +timeCreated: 1769706309 \ No newline at end of file diff --git a/Unity/Assets/Json/Builders/JsonSchemaBuilders.cs b/Unity/Assets/Json/Builders/JsonSchemaBuilders.cs new file mode 100644 index 0000000..83af15d --- /dev/null +++ b/Unity/Assets/Json/Builders/JsonSchemaBuilders.cs @@ -0,0 +1,56 @@ +using System; + +namespace NeuroSdk.Json.Builders +{ + public interface IRootSchemaBuilders + { + ObjectBuilder Object(); + ArrayBuilder Array(Func> build) where T : SchemaBuilder; + } + + public sealed class JsonSchemaBuilders : IRootSchemaBuilders + { + internal JsonSchemaBuilders() + { + } + + // singleton schizophrenia xd + public static IRootSchemaBuilders Instance { get; } = new JsonSchemaBuilders(); + + public ObjectBuilder Object() + { + return new ObjectBuilder(); + } + + public ArrayBuilder Array(Func> build) + where T : SchemaBuilder + { + return new ArrayBuilder(build); + } + + public StringBuilder String() + { + return new StringBuilder(); + } + + public IntegerBuilder Integer() + { + return new IntegerBuilder(); + } + + public FloatBuilder Float() + { + return new FloatBuilder(); + } + + public BooleanBuilder Boolean() + { + return new BooleanBuilder(); + } + + public NullBuilder Null() + { + return new NullBuilder(); + } + } +} \ No newline at end of file diff --git a/Unity/Assets/Json/Builders/JsonSchemaBuilders.cs.meta b/Unity/Assets/Json/Builders/JsonSchemaBuilders.cs.meta new file mode 100644 index 0000000..bf8b6c3 --- /dev/null +++ b/Unity/Assets/Json/Builders/JsonSchemaBuilders.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 634f56096f714031a8d9693680f2cc82 +timeCreated: 1769707387 \ No newline at end of file diff --git a/Unity/Assets/Json/Builders/NullBuilder.cs b/Unity/Assets/Json/Builders/NullBuilder.cs new file mode 100644 index 0000000..cb5f612 --- /dev/null +++ b/Unity/Assets/Json/Builders/NullBuilder.cs @@ -0,0 +1,11 @@ +namespace NeuroSdk.Json.Builders +{ + public sealed class NullBuilder : PrimitiveBuilder + { + public NullBuilder() + { + Schema.Type = JsonSchemaType.Null; + Schema.Const = null; + } + } +} \ No newline at end of file diff --git a/Unity/Assets/Json/Builders/NullBuilder.cs.meta b/Unity/Assets/Json/Builders/NullBuilder.cs.meta new file mode 100644 index 0000000..e0492ac --- /dev/null +++ b/Unity/Assets/Json/Builders/NullBuilder.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: adbf731825984f4a9018c6821d104541 +timeCreated: 1769706539 \ No newline at end of file diff --git a/Unity/Assets/Json/Builders/NumberBuilder.cs b/Unity/Assets/Json/Builders/NumberBuilder.cs new file mode 100644 index 0000000..291aa37 --- /dev/null +++ b/Unity/Assets/Json/Builders/NumberBuilder.cs @@ -0,0 +1,30 @@ +namespace NeuroSdk.Json.Builders +{ + public abstract class NumberBuilder : PrimitiveBuilder + where TSelf : NumberBuilder + { + public TSelf Min(float value) + { + Schema.Minimum = value; + return Self; + } + + public TSelf Max(float value) + { + Schema.Maximum = value; + return Self; + } + + public TSelf ExclusiveMin(float value) + { + Schema.ExclusiveMinimum = value; + return Self; + } + + public TSelf ExclusiveMax(float value) + { + Schema.ExclusiveMaximum = value; + return Self; + } + } +} \ No newline at end of file diff --git a/Unity/Assets/Json/Builders/NumberBuilder.cs.meta b/Unity/Assets/Json/Builders/NumberBuilder.cs.meta new file mode 100644 index 0000000..3c614c2 --- /dev/null +++ b/Unity/Assets/Json/Builders/NumberBuilder.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9244035db93c4c13b8f830240f47befe +timeCreated: 1769706268 \ No newline at end of file diff --git a/Unity/Assets/Json/Builders/ObjectBuilder.cs b/Unity/Assets/Json/Builders/ObjectBuilder.cs new file mode 100644 index 0000000..56ef889 --- /dev/null +++ b/Unity/Assets/Json/Builders/ObjectBuilder.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; + +namespace NeuroSdk.Json.Builders +{ + public sealed class ObjectBuilder : SchemaBuilder + { + public ObjectBuilder() + { + Schema.Type = JsonSchemaType.Object; + Schema.Properties = new Dictionary(); + } + + public ObjectBuilder Property( + string name, + Func> build) where T : SchemaBuilder + { + var subBuilder = build(new JsonSchemaBuilders()); + Schema.Properties[name] = subBuilder.Build(); + + if (!subBuilder.IsOptional) Schema.Required.Add(name); + + return this; + } + } +} \ No newline at end of file diff --git a/Unity/Assets/Json/Builders/ObjectBuilder.cs.meta b/Unity/Assets/Json/Builders/ObjectBuilder.cs.meta new file mode 100644 index 0000000..9456f85 --- /dev/null +++ b/Unity/Assets/Json/Builders/ObjectBuilder.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ba10521db3994aaa839cf2450bfa2ae9 +timeCreated: 1769705803 \ No newline at end of file diff --git a/Unity/Assets/Json/Builders/PrimitiveBuilder.cs b/Unity/Assets/Json/Builders/PrimitiveBuilder.cs new file mode 100644 index 0000000..29d7e29 --- /dev/null +++ b/Unity/Assets/Json/Builders/PrimitiveBuilder.cs @@ -0,0 +1,20 @@ +using System.Linq; + +namespace NeuroSdk.Json.Builders +{ + public class PrimitiveBuilder : SchemaBuilder + where TSelf : PrimitiveBuilder + { + public TSelf Const(THolds value) + { + Schema.Const = value; + return Self; + } + + public TSelf Enum(params THolds[] values) + { + Schema.Enum = values.Cast().ToList(); + return Self; + } + } +} \ No newline at end of file diff --git a/Unity/Assets/Json/Builders/PrimitiveBuilder.cs.meta b/Unity/Assets/Json/Builders/PrimitiveBuilder.cs.meta new file mode 100644 index 0000000..87219f7 --- /dev/null +++ b/Unity/Assets/Json/Builders/PrimitiveBuilder.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2c36fd8332b240dc9c103ea7cba1603f +timeCreated: 1769789104 \ No newline at end of file diff --git a/Unity/Assets/Json/Builders/SchemaBuilder.cs b/Unity/Assets/Json/Builders/SchemaBuilder.cs new file mode 100644 index 0000000..52054ef --- /dev/null +++ b/Unity/Assets/Json/Builders/SchemaBuilder.cs @@ -0,0 +1,27 @@ +namespace NeuroSdk.Json.Builders +{ + public class SchemaBuilder where TSelf : SchemaBuilder + { + protected readonly JsonSchema Schema = new(); + protected TSelf Self => (TSelf)this; + + internal bool IsOptional { get; private set; } + + public TSelf Description(string description) + { + Schema.Description = description; + return Self; + } + + public TSelf Optional() + { + IsOptional = true; + return Self; + } + + public JsonSchema Build() + { + return Schema; + } + } +} \ No newline at end of file diff --git a/Unity/Assets/Json/Builders/SchemaBuilder.cs.meta b/Unity/Assets/Json/Builders/SchemaBuilder.cs.meta new file mode 100644 index 0000000..bcbccdc --- /dev/null +++ b/Unity/Assets/Json/Builders/SchemaBuilder.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1e61ee01018d419f9fccf8af4aa8aba7 +timeCreated: 1769705721 \ No newline at end of file diff --git a/Unity/Assets/Json/Builders/StringBuilder.cs b/Unity/Assets/Json/Builders/StringBuilder.cs new file mode 100644 index 0000000..798b8f6 --- /dev/null +++ b/Unity/Assets/Json/Builders/StringBuilder.cs @@ -0,0 +1,36 @@ +using System.Text.RegularExpressions; + +namespace NeuroSdk.Json.Builders +{ + public sealed class StringBuilder : PrimitiveBuilder + { + public StringBuilder() + { + Schema.Type = JsonSchemaType.String; + } + + public StringBuilder MinLength(int value) + { + Schema.MinLength = value; + return this; + } + + public StringBuilder MaxLength(int value) + { + Schema.MaxLength = value; + return this; + } + + public StringBuilder Pattern(string regex) + { + Schema.Pattern = regex; + return this; + } + + public StringBuilder Format(string format) + { + Schema.Format = format; + return this; + } + } +} \ No newline at end of file diff --git a/Unity/Assets/Json/Builders/StringBuilder.cs.meta b/Unity/Assets/Json/Builders/StringBuilder.cs.meta new file mode 100644 index 0000000..494dd81 --- /dev/null +++ b/Unity/Assets/Json/Builders/StringBuilder.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5e4f5688ef794ad084f3e09fb0e4a80b +timeCreated: 1769706126 \ No newline at end of file diff --git a/Unity/Assets/Json/JsonSchema.cs b/Unity/Assets/Json/JsonSchema.cs index 3612f0f..9cdc1b8 100644 --- a/Unity/Assets/Json/JsonSchema.cs +++ b/Unity/Assets/Json/JsonSchema.cs @@ -113,6 +113,9 @@ public List Required [JsonProperty("format")] public string? Format { get; set; } + + [JsonProperty("description")] + public string? Description { get; set; } #endregion diff --git a/Unity/Assets/Json/QJS.cs b/Unity/Assets/Json/QJS.cs index d61504f..1d1e59c 100644 --- a/Unity/Assets/Json/QJS.cs +++ b/Unity/Assets/Json/QJS.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Linq; +using NeuroSdk.Json.Builders; namespace NeuroSdk.Json { @@ -64,5 +65,7 @@ public static JsonSchema WrapObject(IReadOnlyDictionary prop return result; } + + public static IRootSchemaBuilders Builder => JsonSchemaBuilders.Instance; } -} +} \ No newline at end of file