cultivar/executor/src/api.rs

40 lines
878 B
Rust

use crate::SIMS;
use cultivar_common::prelude::*;
use sp_runtime_interface::runtime_interface;
#[allow(dead_code)]
#[runtime_interface]
pub trait Api {
fn get_turn(sim_token: SimToken) -> Result<u32, SimError> {
Ok(SIMS
.write()
.get_sim_from_token_mut(&sim_token)
.ok_or(SimError::SimNotFound)?
.turn)
}
fn say(msg: &str) {
println!("{msg}");
}
fn walk(
sim_token: SimToken,
entity_id: EntityId,
direction: Direction,
) -> Result<Result<Position, (Position, WalkError)>, SimError> {
if let Some(mut sim) = SIMS.write().get_sim_from_token_mut(&sim_token) {
let sim = sim.value_mut();
if let Some(entity) = sim.entities.get_mut(&entity_id) {
match entity {
Entity::Ferris(entity) => Ok(entity.walk(&sim.board, direction)),
}
} else {
Err(SimError::EntityNotFound)
}
} else {
Err(SimError::SimNotFound)
}
}
}