use vize_l0::{Span, String};
use crate::expr::{ExprRef, OpaqueReason};
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum FolioExpr {
Js {
source: String,
span: Span,
},
Foreign {
dialect: String,
source: String,
span: Span,
},
Opaque {
reason: OpaqueReason,
source: String,
span: Span,
},
Filter {
source: String,
span: Span,
},
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct FolioForBinding {
pub source: FolioExpr,
pub value: FolioExpr,
pub key: Option<FolioExpr>,
pub index: Option<FolioExpr>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct FolioContract {
pub read: FolioExpr,
pub write: FolioExpr,
}
pub(in crate::folio) fn own_expr(expr: &ExprRef<'_>) -> FolioExpr {
match expr {
ExprRef::Js(js) => FolioExpr::Js {
source: String::from(js.source),
span: js.span,
},
ExprRef::Foreign(foreign) => FolioExpr::Foreign {
dialect: String::from(foreign.dialect),
source: String::from(foreign.source),
span: foreign.span,
},
ExprRef::Opaque(opaque) => FolioExpr::Opaque {
reason: opaque.reason,
source: String::from(opaque.source),
span: opaque.span,
},
ExprRef::Filter(filter) => FolioExpr::Filter {
source: String::from(filter.source),
span: filter.span,
},
}
}