//! A few helper functions for dealing with primitives.

pub use chalk_ir::{FloatTy, IntTy, UintTy};
pub use hir_def::builtin_type::{BuiltinFloat, BuiltinInt, BuiltinUint};

pub fn int_ty_to_string(ty: IntTy) -> &'static str {
    match ty {
        IntTy::Isize => "isize",
        IntTy::I8 => "i8",
        IntTy::I16 => "i16",
        IntTy::I32 => "i32",
        IntTy::I64 => "i64",
        IntTy::I128 => "i128",
    }
}

pub fn uint_ty_to_string(ty: UintTy) -> &'static str {
    match ty {
        UintTy::Usize => "usize",
        UintTy::U8 => "u8",
        UintTy::U16 => "u16",
        UintTy::U32 => "u32",
        UintTy::U64 => "u64",
        UintTy::U128 => "u128",
    }
}

pub fn float_ty_to_string(ty: FloatTy) -> &'static str {
    match ty {
        FloatTy::F16 => "f16",
        FloatTy::F32 => "f32",
        FloatTy::F64 => "f64",
        FloatTy::F128 => "f128",
    }
}

pub fn int_ty_to_string_ns(ty: rustc_type_ir::IntTy) -> &'static str {
    use rustc_type_ir::IntTy;
    match ty {
        IntTy::Isize => "isize",
        IntTy::I8 => "i8",
        IntTy::I16 => "i16",
        IntTy::I32 => "i32",
        IntTy::I64 => "i64",
        IntTy::I128 => "i128",
    }
}

pub fn uint_ty_to_string_ns(ty: rustc_type_ir::UintTy) -> &'static str {
    use rustc_type_ir::UintTy;
    match ty {
        UintTy::Usize => "usize",
        UintTy::U8 => "u8",
        UintTy::U16 => "u16",
        UintTy::U32 => "u32",
        UintTy::U64 => "u64",
        UintTy::U128 => "u128",
    }
}

pub fn float_ty_to_string_ns(ty: rustc_type_ir::FloatTy) -> &'static str {
    use rustc_type_ir::FloatTy;
    match ty {
        FloatTy::F16 => "f16",
        FloatTy::F32 => "f32",
        FloatTy::F64 => "f64",
        FloatTy::F128 => "f128",
    }
}

pub(super) fn int_ty_from_builtin(t: BuiltinInt) -> IntTy {
    match t {
        BuiltinInt::Isize => IntTy::Isize,
        BuiltinInt::I8 => IntTy::I8,
        BuiltinInt::I16 => IntTy::I16,
        BuiltinInt::I32 => IntTy::I32,
        BuiltinInt::I64 => IntTy::I64,
        BuiltinInt::I128 => IntTy::I128,
    }
}

pub(super) fn uint_ty_from_builtin(t: BuiltinUint) -> UintTy {
    match t {
        BuiltinUint::Usize => UintTy::Usize,
        BuiltinUint::U8 => UintTy::U8,
        BuiltinUint::U16 => UintTy::U16,
        BuiltinUint::U32 => UintTy::U32,
        BuiltinUint::U64 => UintTy::U64,
        BuiltinUint::U128 => UintTy::U128,
    }
}

pub(super) fn float_ty_from_builtin(t: BuiltinFloat) -> FloatTy {
    match t {
        BuiltinFloat::F16 => FloatTy::F16,
        BuiltinFloat::F32 => FloatTy::F32,
        BuiltinFloat::F64 => FloatTy::F64,
        BuiltinFloat::F128 => FloatTy::F128,
    }
}
