partway towards commands
I got very confused and started mucking about with "spawn" when in fact all I needed was the "inline" extension type in orcx that allows the interpreter to expose custom constants.
This commit is contained in:
@@ -3,15 +3,12 @@ use std::pin::Pin;
|
||||
|
||||
use futures::AsyncWrite;
|
||||
use orchid_api_traits::Encode;
|
||||
use orchid_base::error::mk_errv;
|
||||
use orchid_base::interner::is;
|
||||
use orchid_base::sym;
|
||||
use orchid_extension::atom::{Atomic, ForeignAtom, TAtom};
|
||||
use orchid_extension::atom_owned::{DeserializeCtx, OwnedAtom, OwnedVariant};
|
||||
use orchid_base::{is, mk_errv, sym};
|
||||
use orchid_extension::conv::{ToExpr, TryFromExpr};
|
||||
use orchid_extension::expr::{Expr, ExprHandle};
|
||||
use orchid_extension::gen_expr::{call, new_atom, sym_ref};
|
||||
use orchid_extension::gen_expr::{call, new_atom};
|
||||
use orchid_extension::tree::{GenMember, cnst, fun, prefix};
|
||||
use orchid_extension::{Atomic, DeserializeCtx, ForeignAtom, OwnedAtom, OwnedVariant, TAtom};
|
||||
|
||||
use crate::{OrcString, api};
|
||||
|
||||
@@ -37,7 +34,7 @@ impl OwnedAtom for OptAtom {
|
||||
|
||||
pub struct OrcOpt<T>(pub Option<T>);
|
||||
impl<T: TryFromExpr> TryFromExpr for OrcOpt<T> {
|
||||
async fn try_from_expr(expr: Expr) -> orchid_base::error::OrcRes<Self> {
|
||||
async fn try_from_expr(expr: Expr) -> orchid_base::OrcRes<Self> {
|
||||
let atom = TAtom::<OptAtom>::try_from_expr(expr).await?;
|
||||
match atom.value {
|
||||
None => Ok(OrcOpt(None)),
|
||||
@@ -50,9 +47,9 @@ impl<T: TryFromExpr> TryFromExpr for OrcOpt<T> {
|
||||
impl<T: ToExpr + 'static> ToExpr for OrcOpt<T> {
|
||||
async fn to_gen(self) -> orchid_extension::gen_expr::GExpr {
|
||||
if let Some(val) = self.0 {
|
||||
call(sym_ref(sym!(std::option::some)), [val.to_gen().await])
|
||||
call(sym!(std::option::some), val).await
|
||||
} else {
|
||||
sym_ref(sym!(std::option::none))
|
||||
sym!(std::option::none).to_gen().await
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user