上clippy
This commit is contained in:
parent
a09a6dc7f4
commit
00c0121940
54
src/data.rs
54
src/data.rs
@ -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))
|
||||||
|
24
src/read.rs
24
src/read.rs
@ -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())
|
||||||
};
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user