- interner impls logically separate from API in orchid-base (default host interner still in base for testing) - error reporting, logging, and a variety of other features passed down via context in extension, not yet in host to maintain library-ish profile, should consider options - no global spawn mechanic, the host has a spawn function but extensions only get a stash for enqueuing async work in sync callbacks which is then explicitly, manually, and with strict order popped and awaited - still deadlocks nondeterministically for some ungodly reason
36 lines
1.1 KiB
Rust
36 lines
1.1 KiB
Rust
use orchid_api_derive::Coding;
|
|
use orchid_api_traits::Request;
|
|
use orchid_base::name::Sym;
|
|
use orchid_extension::atom::{AtomMethod, Atomic, MethodSetBuilder, Supports};
|
|
use orchid_extension::atom_thin::{ThinAtom, ThinVariant};
|
|
|
|
use crate::std::protocol::types::{GetImplMethod, GetTagIdMethod};
|
|
|
|
#[derive(Coding, Clone, Debug)]
|
|
pub struct AsStrTag;
|
|
impl Atomic for AsStrTag {
|
|
type Data = AsStrTag;
|
|
type Variant = ThinVariant;
|
|
fn reg_reqs() -> MethodSetBuilder<Self> {
|
|
MethodSetBuilder::new().handle::<GetTagIdMethod>().handle::<GetImplMethod>()
|
|
}
|
|
}
|
|
impl ThinAtom for AsStrTag {}
|
|
impl Supports<GetTagIdMethod> for AsStrTag {
|
|
async fn handle(&self, _: GetTagIdMethod) -> <GetTagIdMethod as Request>::Response {
|
|
Sym::parse("std::string::to_string").await.unwrap().to_api()
|
|
}
|
|
}
|
|
impl Supports<GetImplMethod> for AsStrTag {
|
|
async fn handle(&self, _: GetImplMethod) -> <GetImplMethod as Request>::Response { None }
|
|
}
|
|
|
|
#[derive(Coding, Clone, Debug)]
|
|
pub struct ToStringMethod;
|
|
impl Request for ToStringMethod {
|
|
type Response = String;
|
|
}
|
|
impl AtomMethod for ToStringMethod {
|
|
const NAME: &str = "std::string::to_string";
|
|
}
|