Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions Unity/Assets/Json/Builders.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

37 changes: 37 additions & 0 deletions Unity/Assets/Json/Builders/ArrayBuilder.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
using System;
using System.Collections.Generic;

namespace NeuroSdk.Json.Builders
{
public sealed class ArrayBuilder : SchemaBuilder<IEnumerator<object>>
{
public ArrayBuilder()
{
Schema.Type = JsonSchemaType.Array;
}

public ArrayBuilder Items<TBuilder>(Func<JsonSchemaBuilders, SchemaBuilder<TBuilder>> build)
{
Schema.Items = build(new JsonSchemaBuilders()).Build();
return this;
}

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;
}
}
}
3 changes: 3 additions & 0 deletions Unity/Assets/Json/Builders/ArrayBuilder.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions Unity/Assets/Json/Builders/BooleanBuilder.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
namespace NeuroSdk.Json.Builders
{
public sealed class BooleanBuilder : SchemaBuilder<bool>
{
public BooleanBuilder()
{
Schema.Type = JsonSchemaType.Boolean;
}
}
}
3 changes: 3 additions & 0 deletions Unity/Assets/Json/Builders/BooleanBuilder.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions Unity/Assets/Json/Builders/FloatBuilder.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
namespace NeuroSdk.Json.Builders
{
public sealed class FloatBuilder : NumberBuilder<FloatBuilder>
{
public FloatBuilder()
{
Schema.Type = JsonSchemaType.Float;
}
}
}
3 changes: 3 additions & 0 deletions Unity/Assets/Json/Builders/FloatBuilder.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions Unity/Assets/Json/Builders/IntegerBuilder.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
namespace NeuroSdk.Json.Builders
{
public sealed class IntegerBuilder : NumberBuilder<IntegerBuilder>
{
public IntegerBuilder()
{
Schema.Type = JsonSchemaType.Integer;
}
}
}
3 changes: 3 additions & 0 deletions Unity/Assets/Json/Builders/IntegerBuilder.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

25 changes: 25 additions & 0 deletions Unity/Assets/Json/Builders/JsonSchemaBuilders.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
namespace NeuroSdk.Json.Builders
{
public interface IRootSchemaBuilders
{
ObjectBuilder Object();
ArrayBuilder Array();
}

public sealed class JsonSchemaBuilders : IRootSchemaBuilders
{
// singleton schizophrenia xd
public static IRootSchemaBuilders Instance { get; } = new JsonSchemaBuilders();

internal JsonSchemaBuilders() {}

public ObjectBuilder Object() => new();
public ArrayBuilder Array() => new();
public StringBuilder String() => new();
public IntegerBuilder Integer() => new();
public FloatBuilder Float() => new();
public BooleanBuilder Boolean() => new();
public NullBuilder Null() => new();
}

}
3 changes: 3 additions & 0 deletions Unity/Assets/Json/Builders/JsonSchemaBuilders.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 11 additions & 0 deletions Unity/Assets/Json/Builders/NullBuilder.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
namespace NeuroSdk.Json.Builders
{
public sealed class NullBuilder : SchemaBuilder<object>
{
public NullBuilder()
{
Schema.Type = JsonSchemaType.Null;
Schema.Const = null;
}
}
}
3 changes: 3 additions & 0 deletions Unity/Assets/Json/Builders/NullBuilder.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

32 changes: 32 additions & 0 deletions Unity/Assets/Json/Builders/NumberBuilder.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
namespace NeuroSdk.Json.Builders
{
public abstract class NumberBuilder<TSelf> : SchemaBuilder<TSelf>
where TSelf : NumberBuilder<TSelf>
{
protected TSelf Self => (TSelf)this;

public TSelf Min(double value)
{
Schema.Minimum = (float)value;
return Self;
}

public TSelf Max(double value)
{
Schema.Maximum = (float)value;
return Self;
}

public TSelf ExclusiveMin(double value)
{
Schema.ExclusiveMinimum = (float)value;
return Self;
}

public TSelf ExclusiveMax(double value)
{
Schema.ExclusiveMaximum = (float)value;
return Self;
}
}
}
3 changes: 3 additions & 0 deletions Unity/Assets/Json/Builders/NumberBuilder.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

29 changes: 29 additions & 0 deletions Unity/Assets/Json/Builders/ObjectBuilder.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;

namespace NeuroSdk.Json.Builders
{
public sealed class ObjectBuilder : SchemaBuilder<object>
{
public ObjectBuilder()
{
Schema.Type = JsonSchemaType.Object;
Schema.Properties = new Dictionary<string, JsonSchema>();
}

public ObjectBuilder Property<TBuilder>(
string name,
Func<JsonSchemaBuilders, SchemaBuilder<TBuilder>> build,
bool required = true)
{
var subBuilder = build(new JsonSchemaBuilders());
Schema.Properties[name] = subBuilder.Build();

if (required)
Schema.Required.Add(name);

return this;
}

}
}
3 changes: 3 additions & 0 deletions Unity/Assets/Json/Builders/ObjectBuilder.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

24 changes: 24 additions & 0 deletions Unity/Assets/Json/Builders/SchemaBuilder.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
using System.Collections.Generic;
using System.Linq;

namespace NeuroSdk.Json.Builders
{
public class SchemaBuilder<THolds>
{
protected readonly JsonSchema Schema = new();

public JsonSchema Build() => Schema;

public SchemaBuilder<THolds> Const(object value)
{
Schema.Const = value;
return this;
}

public SchemaBuilder<THolds> Enum(params THolds[] values)
{
Schema.Enum = values.Cast<object>().ToList();
return this;
}
}
}
3 changes: 3 additions & 0 deletions Unity/Assets/Json/Builders/SchemaBuilder.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

28 changes: 28 additions & 0 deletions Unity/Assets/Json/Builders/StringBuilder.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
namespace NeuroSdk.Json.Builders
{
public sealed class StringBuilder : SchemaBuilder<object>
{
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;
}
}
}
3 changes: 3 additions & 0 deletions Unity/Assets/Json/Builders/StringBuilder.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 4 additions & 1 deletion Unity/Assets/Json/QJS.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using NeuroSdk.Json.Builders;

namespace NeuroSdk.Json
{
Expand Down Expand Up @@ -64,5 +65,7 @@ public static JsonSchema WrapObject(IReadOnlyDictionary<string, JsonSchema> prop

return result;
}

public static IRootSchemaBuilders Builder => JsonSchemaBuilders.Instance;
}
}
}