cultivar/common/src/board.rs

35 lines
738 B
Rust

use num_traits::{One, Signed, Zero};
use parity_scale_codec::{Encode, Decode};
#[derive(Debug, Default)]
pub struct Board {
pub size: (usize, usize),
}
pub trait Position {
fn get_position(&self) -> (i32, i32);
}
#[derive(Clone, Copy, Debug, Decode, Encode, Eq, PartialEq, Hash)]
pub enum Direction {
East,
North,
South,
West,
}
impl Direction {
pub fn to_position<T: One + Signed + Zero>(&self) -> (T, T) {
match self {
Self::East => (T::one(), T::zero()),
Self::North => (T::zero(), T::one().neg()),
Self::South => (T::zero(), T::one()),
Self::West => (T::one().neg(), T::zero()),
}
}
}
impl sp_runtime_interface::pass_by::PassBy for Direction {
type PassBy = sp_runtime_interface::pass_by::Codec<Self>;
}