rust-analyzer/crates/ra_hir/src/ty/primitive.rs

133 lines
3.1 KiB
Rust
Raw Normal View History

2018-12-20 20:56:28 +00:00
use std::fmt;
2018-12-27 17:26:15 +00:00
use crate::{Name, KnownName};
2018-12-20 20:56:28 +00:00
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Copy)]
pub enum IntTy {
Isize,
I8,
I16,
I32,
I64,
I128,
}
impl fmt::Debug for IntTy {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
fmt::Display::fmt(self, f)
}
}
impl fmt::Display for IntTy {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}", self.ty_to_string())
}
}
impl IntTy {
pub fn ty_to_string(&self) -> &'static str {
match *self {
IntTy::Isize => "isize",
IntTy::I8 => "i8",
IntTy::I16 => "i16",
IntTy::I32 => "i32",
IntTy::I64 => "i64",
IntTy::I128 => "i128",
}
}
2018-12-22 21:17:55 +00:00
2018-12-27 17:26:15 +00:00
pub fn from_name(name: &Name) -> Option<IntTy> {
match name.as_known_name()? {
KnownName::Isize => Some(IntTy::Isize),
KnownName::I8 => Some(IntTy::I8),
KnownName::I16 => Some(IntTy::I16),
KnownName::I32 => Some(IntTy::I32),
KnownName::I64 => Some(IntTy::I64),
KnownName::I128 => Some(IntTy::I128),
2018-12-22 21:17:55 +00:00
_ => None,
}
}
2018-12-20 20:56:28 +00:00
}
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Copy)]
pub enum UintTy {
Usize,
U8,
U16,
U32,
U64,
U128,
}
impl UintTy {
pub fn ty_to_string(&self) -> &'static str {
match *self {
UintTy::Usize => "usize",
UintTy::U8 => "u8",
UintTy::U16 => "u16",
UintTy::U32 => "u32",
UintTy::U64 => "u64",
UintTy::U128 => "u128",
}
}
2018-12-22 21:17:55 +00:00
2018-12-27 17:26:15 +00:00
pub fn from_name(name: &Name) -> Option<UintTy> {
match name.as_known_name()? {
KnownName::Usize => Some(UintTy::Usize),
KnownName::U8 => Some(UintTy::U8),
KnownName::U16 => Some(UintTy::U16),
KnownName::U32 => Some(UintTy::U32),
KnownName::U64 => Some(UintTy::U64),
KnownName::U128 => Some(UintTy::U128),
2018-12-22 21:17:55 +00:00
_ => None,
}
}
2018-12-20 20:56:28 +00:00
}
impl fmt::Debug for UintTy {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
fmt::Display::fmt(self, f)
}
}
impl fmt::Display for UintTy {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}", self.ty_to_string())
}
}
#[derive(Clone, PartialEq, Eq, Hash, Copy, PartialOrd, Ord)]
pub enum FloatTy {
F32,
F64,
}
impl fmt::Debug for FloatTy {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
fmt::Display::fmt(self, f)
}
}
impl fmt::Display for FloatTy {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}", self.ty_to_string())
}
}
impl FloatTy {
pub fn ty_to_string(self) -> &'static str {
match self {
FloatTy::F32 => "f32",
FloatTy::F64 => "f64",
}
}
2018-12-22 21:17:55 +00:00
2018-12-27 17:26:15 +00:00
pub fn from_name(name: &Name) -> Option<FloatTy> {
match name.as_known_name()? {
KnownName::F32 => Some(FloatTy::F32),
KnownName::F64 => Some(FloatTy::F64),
2018-12-22 21:17:55 +00:00
_ => None,
}
}
2018-12-20 20:56:28 +00:00
}