上clippy

This commit is contained in:
shenjack 2023-08-05 12:49:29 +08:00
parent a09a6dc7f4
commit 00c0121940
Signed by: shenjack
GPG Key ID: 7B1134A979775551
2 changed files with 40 additions and 38 deletions

View File

@ -34,22 +34,22 @@ pub enum NbtList {
pub enum NbtValue {
/// 0x00
/// 标志着一个 NBT Compound/List 的结束
NbtEnd,
End,
/// 0x01
NbtByte(bool),
Byte(bool),
/// 0x02
NbtShort(i16),
Short(i16),
/// 0x03
NbtInt(i32),
Int(i32),
/// 0x04
NbtLong(i64),
Long(i64),
/// 0x05
NbtFloat(f32),
Float(f32),
/// 0x06
NbtDouble(f64),
Double(f64),
/// 0x08
/// 一个 UTF-8 编码的定长字符串
NbtString(Arc<str>),
String(Arc<str>),
}
impl NbtItem {
@ -166,41 +166,41 @@ macro_rules! read_data {
impl NbtValue {
pub fn as_end(&self) -> Option<()> {
match self {
Self::NbtEnd => Some(()),
Self::End => Some(()),
_ => None,
}
}
export_data!(as_bool, NbtByte, bool);
export_data!(as_i16, NbtShort, i16);
export_data!(as_i32, NbtInt, i32);
export_data!(as_i64, NbtLong, i64);
export_data!(as_f32, NbtFloat, f32);
export_data!(as_f64, NbtDouble, f64);
export_data!(as_string, NbtString, Arc<str>);
export_data!(as_bool, Byte, bool);
export_data!(as_i16, Short, i16);
export_data!(as_i32, Int, i32);
export_data!(as_i64, Long, i64);
export_data!(as_f32, Float, f32);
export_data!(as_f64, Double, f64);
export_data!(as_string, String, Arc<str>);
pub fn from_end(value: &mut Reader) -> Self {
let mut buff = [0_u8];
_ = value.read(&mut buff).unwrap();
Self::NbtEnd
Self::End
}
read_data!(from_bool, NbtByte, bool, 1);
read_data!(from_i16, NbtShort, i16, 2);
read_data!(from_i32, NbtInt, i32, 4);
read_data!(from_i64, NbtLong, i64, 8);
read_data!(from_f32, NbtFloat, f32, 4);
read_data!(from_f64, NbtDouble, f64, 8);
read_data!(from_bool, Byte, bool, 1);
read_data!(from_i16, Short, i16, 2);
read_data!(from_i32, Int, i32, 4);
read_data!(from_i64, Long, i64, 8);
read_data!(from_f32, Float, f32, 4);
read_data!(from_f64, Double, f64, 8);
/// 直接读取
pub fn from_string(value: &mut Reader) -> Self {
let len: StringLength = Self::from_i32(value).as_i32().unwrap() as StringLength;
if len == 0 {
return Self::NbtString(Arc::from(""));
return Self::String(Arc::from(""));
}
let mut buff = vec![0_u8; len as usize];
_ = value.read(&mut buff).unwrap();
Self::NbtString(Arc::from(String::from_utf8(buff).unwrap()))
Self::String(Arc::from(String::from_utf8(buff).unwrap()))
}
/// 读取一个有类型无名称的值 (List)
@ -208,7 +208,7 @@ impl NbtValue {
let mut value_type = [0_u8];
_ = value.read(&mut value_type).unwrap();
match value_type {
[0x00] => Some(Self::NbtEnd),
[0x00] => Some(Self::End),
[0x01] => Some(Self::from_bool(value)),
[0x02] => Some(Self::from_i16(value)),
[0x03] => Some(Self::from_i32(value)),
@ -228,7 +228,7 @@ impl NbtValue {
let mut value_type = [0_u8];
_ = value.read(&mut value_type).unwrap();
match value_type {
[0x00] => Some((Self::NbtEnd, Arc::from(""))),
[0x00] => Some((Self::End, Arc::from(""))),
[0x01] => {
let name = Self::from_string(value).as_string().unwrap();
Some((Self::from_bool(value), name))

View File

@ -10,7 +10,7 @@ use std::io::{Cursor, Read};
/// (0x0A) Compound <xxxx>
/// (0x0B) Vec<i32>
/// (0x0C) Vec<i64>
pub mod read {
pub mod read_data {
use crate::data::{NbtItem, NbtLength, NbtList, NbtValue, Reader};
use std::collections::HashMap;
use std::io::Read;
@ -163,13 +163,13 @@ pub mod read {
pub fn from_compound(value: &mut Reader) -> NbtList {
// 进来直接是 values
// loop 读取长度 name len name value value
// 直到一个 NbtEnd
// 直到一个 End
let mut map: HashMap<Arc<str>, NbtItem> = HashMap::new();
loop {
let mut type_tag = [0_u8; 1];
_ = value.read(&mut type_tag).unwrap();
if type_tag == [0x00] {
// NbtEnd
// End
break;
}
// 读取 name
@ -208,8 +208,10 @@ pub mod read {
}
}
use read_data::{from_bool_array, from_compound, from_i32_array, from_i64_array, from_nbt_list};
pub enum NbtStatus {
/// 读取到了 NbtEnd
/// 读取到了 End
End,
/// 继续中
Going(NbtItem),
@ -239,12 +241,12 @@ impl TryFrom<Cursor<&[u8]>> for NbtItem {
[0x04] => NbtStatus::Going(NbtItem::Value(NbtValue::from_i64(&mut value))),
[0x05] => NbtStatus::Going(NbtItem::Value(NbtValue::from_f32(&mut value))),
[0x06] => NbtStatus::Going(NbtItem::Value(NbtValue::from_f64(&mut value))),
[0x07] => NbtStatus::Going(NbtItem::from(read::from_bool_array(&mut value))),
[0x07] => NbtStatus::Going(NbtItem::from(from_bool_array(&mut value))),
[0x08] => NbtStatus::Going(NbtItem::Value(NbtValue::from_string(&mut value))),
[0x09] => NbtStatus::Going(NbtItem::from(read::from_nbt_list(&mut value))),
[0x0A] => NbtStatus::Going(NbtItem::from(read::from_compound(&mut value))),
[0x0B] => NbtStatus::Going(NbtItem::from(read::from_i32_array(&mut value))),
[0x0C] => NbtStatus::Going(NbtItem::from(read::from_i64_array(&mut value))),
[0x09] => NbtStatus::Going(NbtItem::from(from_nbt_list(&mut value))),
[0x0A] => NbtStatus::Going(NbtItem::from(from_compound(&mut value))),
[0x0B] => NbtStatus::Going(NbtItem::from(from_i32_array(&mut value))),
[0x0C] => NbtStatus::Going(NbtItem::from(from_i64_array(&mut value))),
_ => NbtStatus::Error(std::io::Error::new(
std::io::ErrorKind::InvalidData,
format!(
@ -267,10 +269,10 @@ impl TryFrom<Cursor<&[u8]>> for NbtItem {
}
}
// 理论上 长度应该为 2
return if items.len() >= 3 {
if items.len() >= 3 {
Ok(NbtItem::Array(NbtList::from(items)))
} else {
Ok(items[0].clone())
};
}
}
}