harn-vm 0.8.39

Async bytecode virtual machine for the Harn programming language
Documentation
use std::rc::Rc;

use harn_parser::TypeExpr;

use crate::schema::CanonicalParamSchema;

#[derive(Debug, Clone)]
pub(crate) enum RuntimeParamGuard {
    CanonicalSchema(CanonicalParamSchema),
    InvalidSchema(Rc<str>),
    TypeExpr(TypeExpr),
}

impl RuntimeParamGuard {
    pub(crate) fn from_type_expr(type_expr: &TypeExpr) -> Self {
        if let Some(schema) = crate::compiler::Compiler::type_expr_to_schema_value(type_expr) {
            return match crate::schema::canonical_param_schema(&schema) {
                Ok(schema) => Self::CanonicalSchema(schema),
                Err(error) => Self::InvalidSchema(Rc::from(error)),
            };
        }

        Self::TypeExpr(type_expr.clone())
    }
}