use sim_kernel::{Cx, Result, Symbol};
use sim_lib_standard_core::{
LanguageProfile, OrganUse, ProfileBackingLib, ProfileRegistry, fidelity_badge,
install_language_profile,
};
use crate::{
ruby_blocks_fidelity_symbol, ruby_conformance_test_symbol, ruby_control_fidelity_symbol,
ruby_dispatch_fidelity_symbol, ruby_lowering_symbol, ruby_profile_symbol, ruby_reader_symbol,
};
pub fn ruby_dsl_profile() -> LanguageProfile {
let profile = ruby_profile_symbol();
let test = ruby_conformance_test_symbol();
LanguageProfile::new(profile.clone())
.with_reader(ruby_reader_symbol())
.with_lowering(ruby_lowering_symbol())
.with_eval_policy(Symbol::qualified("eval", "ruby-dsl"))
.with_organ(OrganUse::new(sim_lib_control::control_organ_symbol()))
.with_organ(OrganUse::new(sim_lib_dispatch::dispatch_organ_symbol()))
.with_unsupported_form(Symbol::qualified("ruby", "full-object-model"))
.with_conformance_test(test.clone())
.with_fidelity_badge(fidelity_badge(
&profile,
ruby_control_fidelity_symbol(),
1,
&test,
))
.with_fidelity_badge(fidelity_badge(
&profile,
ruby_dispatch_fidelity_symbol(),
1,
&test,
))
.with_fidelity_badge(fidelity_badge(
&profile,
ruby_blocks_fidelity_symbol(),
0,
&test,
))
}
pub fn install_ruby_dsl_profile(
cx: &mut Cx,
registry: &mut ProfileRegistry,
) -> Result<LanguageProfile> {
install_language_profile(
cx,
registry,
ruby_dsl_profile(),
&[
ProfileBackingLib::loadable(
sim_lib_control::control_organ_symbol(),
sim_lib_control::manifest_name(),
sim_lib_control::install_control_lib,
None,
),
ProfileBackingLib::unresolved(
sim_lib_dispatch::dispatch_organ_symbol(),
Symbol::qualified("sim", "dispatch"),
),
],
&[],
)
}