use async_trait::async_trait;
use runtime_ports::{
OperationContext, PortFailure, ResolvedExecutionContext, ResourceSession, ResourceSnapshot,
};
pub struct BindingResourceSession {
resolved: ResolvedExecutionContext,
}
impl BindingResourceSession {
pub fn new(resolved: ResolvedExecutionContext) -> Self {
Self { resolved }
}
}
#[async_trait]
impl ResourceSession for BindingResourceSession {
async fn load(&self, operation: &OperationContext) -> Result<ResourceSnapshot, PortFailure> {
operation.remaining()?;
let instructions = self
.resolved
.metadata
.get("instructions")
.cloned()
.into_iter()
.collect();
Ok(ResourceSnapshot {
instructions,
skills: Default::default(),
digest: self.resolved.definition_digest.clone().unwrap_or_else(|| {
format!(
"{}@{}",
self.resolved.definition_id, self.resolved.definition_version
)
}),
})
}
}