internal static GroovyGremlinQuery?TryToGroovy(this ISerializedGremlinQuery serializedGremlinQuery) { return(serializedGremlinQuery switch { GroovyGremlinQuery serializedQuery => serializedQuery, BytecodeGremlinQuery byteCodeQuery => byteCodeQuery.ToGroovy(), _ => default });
public IAsyncEnumerable <object> Execute(ISerializedGremlinQuery serializedQuery, IGremlinQueryEnvironment environment) { return(AsyncEnumerable.Create(Core)); async IAsyncEnumerator <object> Core(CancellationToken ct) { var maybeResults = default(ResultSet <JToken>?); var clientTask = _lazyGremlinClient.GetValue(environment.Logger); if (!Guid.TryParse(serializedQuery.Id, out var requestId)) { requestId = Guid.NewGuid(); environment.Logger.LogInformation($"Mapping query id {serializedQuery.Id} to request id {requestId}."); } var requestMessage = serializedQuery switch { GroovyGremlinQuery groovyScript => RequestMessage .Build(Tokens.OpsEval) .AddArgument(Tokens.ArgsGremlin, groovyScript.Script) .AddArgument(Tokens.ArgsAliases, _aliasArgs) .AddArgument(Tokens.ArgsBindings, groovyScript.Bindings) .OverrideRequestId(requestId) .Create(), BytecodeGremlinQuery bytecodeQuery => RequestMessage .Build(Tokens.OpsBytecode) .Processor(Tokens.ProcessorTraversal) .AddArgument(Tokens.ArgsGremlin, bytecodeQuery.Bytecode) .AddArgument(Tokens.ArgsAliases, _aliasArgs) .OverrideRequestId(requestId) .Create(), _ => throw new ArgumentException($"Cannot handle serialized query of type {serializedQuery.GetType()}.") }; maybeResults = await(await clientTask) .SubmitAsync <JToken>(requestMessage) .ConfigureAwait(false); if (maybeResults is { } results) { foreach (var obj in results) { yield return(obj); } } } } }