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

View File

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