use crate::{ComponentDependencyKey, InstructionId};
use async_trait::async_trait;
use golem_wasm_ast::analysis::AnalysedType;
use golem_wasm_rpc::ValueAndType;
#[async_trait]
pub trait RibComponentFunctionInvoke {
async fn invoke(
&self,
component_dependency_key: ComponentDependencyKey,
instruction_id: &InstructionId,
worker_name: EvaluatedWorkerName,
function_name: EvaluatedFqFn,
args: EvaluatedFnArgs,
return_type: Option<AnalysedType>,
) -> RibFunctionInvokeResult;
}
pub type RibFunctionInvokeResult =
Result<Option<ValueAndType>, Box<dyn std::error::Error + Send + Sync>>;
#[derive(Debug)]
pub struct EvaluatedFqFn(pub String);
#[derive(Clone)]
pub struct EvaluatedWorkerName(pub String);
pub struct EvaluatedFnArgs(pub Vec<ValueAndType>);