#![feature(never_type)]
#![no_std]

mod primitive_impls;
mod wrapper_impls;

pub trait SyscallRegister {
    fn into_syscall_register(self) -> usize;
    fn from_syscall_register(value: usize) -> Self;
}

pub trait SyscallFatRegister {
    fn as_syscall_meta(&self) -> usize;
    fn as_syscall_data(&self) -> usize;

    fn from_syscall_registers(meta: usize, data: usize) -> Self;
}

/// # Safety
///
/// Meant for abi-generator to provide a "hint" that the type, when wrapped in an Option or Result,
/// can be fit into a single register.
pub unsafe trait ThinWrapped: SyscallRegister {}
