Skip to content

Commit

Permalink
Ask for and expose an ImmutableDictionary for the bindings on GroovyG…
Browse files Browse the repository at this point in the history
…remlinScript. This is binary breaking but not source breaking because the old constructor is retained (marked obsolete) and the property contract just returns a more specialized type.
  • Loading branch information
danielcweber committed Aug 17, 2024
1 parent 58bff48 commit 4e468d0
Show file tree
Hide file tree
Showing 6 changed files with 22 additions and 9 deletions.
15 changes: 11 additions & 4 deletions src/Core/SerializedQueries/GroovyGremlinScript.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,20 @@
using static ExRam.Gremlinq.Core.ExceptionHelper;
using System.Collections.Immutable;

using static ExRam.Gremlinq.Core.ExceptionHelper;

namespace ExRam.Gremlinq.Core.Serialization
{
public readonly struct GroovyGremlinScript
{
private readonly string? _script;
private readonly IReadOnlyDictionary<string, object>? _bindings;
private readonly ImmutableDictionary<string, object>? _bindings;

[Obsolete($"Use {nameof(GroovyGremlinScript)}({nameof(String)}, {nameof(ImmutableDictionary<string, object>)}) constructor instead.")]
public GroovyGremlinScript(string script, IReadOnlyDictionary<string, object> bindings) : this(script, bindings.ToImmutableDictionary())
{
}

public GroovyGremlinScript(string script, IReadOnlyDictionary<string, object> bindings)
public GroovyGremlinScript(string script, ImmutableDictionary<string, object> bindings)
{
_script = script;
_bindings = bindings;
Expand All @@ -17,6 +24,6 @@ public GroovyGremlinScript(string script, IReadOnlyDictionary<string, object> bi

public string Script => _script ?? throw UninitializedStruct();

public IReadOnlyDictionary<string, object> Bindings => _bindings ?? throw UninitializedStruct();
public ImmutableDictionary<string, object> Bindings => _bindings ?? throw UninitializedStruct();
}
}
2 changes: 1 addition & 1 deletion src/Core/SerializedQueries/GroovyWriter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public static GroovyGremlinScript ToGroovyScript(Bytecode bytecode, IGremlinQuer
return new GroovyGremlinScript(
stringBuilder.ToString(),
includeBindings
? bindings.ToDictionary(static kvp => (string)kvp.Value, static kvp => kvp.Key)
? bindings.ToImmutableDictionary(static kvp => (string)kvp.Value, static kvp => kvp.Key)
: ImmutableDictionary<string, object>.Empty);
}

Expand Down
2 changes: 1 addition & 1 deletion src/Providers.Core/Extensions/RequestMessageExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ internal static class RequestMessageExtensions
return new GroovyGremlinScript(
script,
includeBindings && requestMessage.Arguments.TryGetValue(Tokens.ArgsBindings, out var bindingsObject) && bindingsObject is IReadOnlyDictionary<string, object> bindings
? bindings
? bindings.ToImmutableDictionary()
: ImmutableDictionary<string, object>.Empty);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1575,8 +1575,10 @@ public static ExRam.Gremlinq.Core.Serialization.GroovyExpression From(string ide
}
public readonly struct GroovyGremlinScript
{
[System.Obsolete("Use GroovyGremlinScript(String, ImmutableDictionary) constructor instead.")]
public GroovyGremlinScript(string script, System.Collections.Generic.IReadOnlyDictionary<string, object> bindings) { }
public System.Collections.Generic.IReadOnlyDictionary<string, object> Bindings { get; }
public GroovyGremlinScript(string script, System.Collections.Immutable.ImmutableDictionary<string, object> bindings) { }
public System.Collections.Immutable.ImmutableDictionary<string, object> Bindings { get; }
public string Script { get; }
public override string ToString() { }
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1575,8 +1575,10 @@ public static ExRam.Gremlinq.Core.Serialization.GroovyExpression From(string ide
}
public readonly struct GroovyGremlinScript
{
[System.Obsolete("Use GroovyGremlinScript(String, ImmutableDictionary) constructor instead.")]
public GroovyGremlinScript(string script, System.Collections.Generic.IReadOnlyDictionary<string, object> bindings) { }
public System.Collections.Generic.IReadOnlyDictionary<string, object> Bindings { get; }
public GroovyGremlinScript(string script, System.Collections.Immutable.ImmutableDictionary<string, object> bindings) { }
public System.Collections.Immutable.ImmutableDictionary<string, object> Bindings { get; }
public string Script { get; }
public override string ToString() { }
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1575,8 +1575,10 @@ public static ExRam.Gremlinq.Core.Serialization.GroovyExpression From(string ide
}
public readonly struct GroovyGremlinScript
{
[System.Obsolete("Use GroovyGremlinScript(String, ImmutableDictionary) constructor instead.")]
public GroovyGremlinScript(string script, System.Collections.Generic.IReadOnlyDictionary<string, object> bindings) { }
public System.Collections.Generic.IReadOnlyDictionary<string, object> Bindings { get; }
public GroovyGremlinScript(string script, System.Collections.Immutable.ImmutableDictionary<string, object> bindings) { }
public System.Collections.Immutable.ImmutableDictionary<string, object> Bindings { get; }
public string Script { get; }
public override string ToString() { }
}
Expand Down

0 comments on commit 4e468d0

Please sign in to comment.