Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support Worker Function Invocation #532

Merged
merged 140 commits into from
May 23, 2024
Merged

Support Worker Function Invocation #532

merged 140 commits into from
May 23, 2024

Conversation

afsalthaj
Copy link
Contributor

@afsalthaj afsalthaj commented May 22, 2024

Fixes #442

Main changes

  • Allows a Rib script that can consist of worker invocation function to form the response
let status = 200;

let start_time = request.path.time;
let end_time = request.path.end_time;
let result = timeline:driver/api/run(start_time, end_time);

{ body: result, status: status }
  • Make EvaluationContext independent of API Gateway use case. This implies, by the time this PR is ready, at least we can say, Rib is fully independent of Golem OSS API Gateway.

Now evaluation-context is

use golem_wasm_ast::analysis::AnalysedFunction;

#[derive(Clone)]
pub struct EvaluationContext {
    pub variables: Option<TypeAnnotatedValue>,
    pub analysed_functions: Vec<AnalysedFunction>,
}
  • Make evaluator be able to run the invocation expressions in the Rib Expression Tree
    Functions can exist anywhere in the Rib expression tree, and evaluator will execute it. This is based on an idea I got from John that I went ahead with this. Whether to disallow more than 1 function or not, I am leaving with the team.

  • Use double-quotes instead of single quotes (this is a decent change from tokeniser itself) to align with wasm-wave syntax. This will make sure we support all of wasm wave syntax

  • Allow users to form variants/enums etc which are simple identifiers until evaluation. Depending on the info in evaluation context, they can be resolved to Enum, Variant, or even function-call. It's even better to feed as much as information about types available (like a symbol table) into the execution context in future. With this PR, the door is opened for it.

@jdegoes I thought I will have at least this decent shape before we start pairing up. It's even easier to reason about what's in there, and I will be more comfortable to pair up on this branch to bring in type information and fix things.

@afsalthaj afsalthaj marked this pull request as ready for review May 23, 2024 10:36
@afsalthaj afsalthaj merged commit 83362ac into main May 23, 2024
14 checks passed
@afsalthaj afsalthaj deleted the bring_context branch May 23, 2024 15:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Support function invocation in Rib
4 participants