Got code to compile and serialize correctly
This commit is contained in:
		
							
								
								
									
										10
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										10
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							@@ -1111,6 +1111,15 @@ dependencies = [
 | 
				
			|||||||
 "serde_derive",
 | 
					 "serde_derive",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "serde_arrays"
 | 
				
			||||||
 | 
					version = "0.1.0"
 | 
				
			||||||
 | 
					source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
				
			||||||
 | 
					checksum = "38636132857f68ec3d5f3eb121166d2af33cb55174c4d5ff645db6165cbef0fd"
 | 
				
			||||||
 | 
					dependencies = [
 | 
				
			||||||
 | 
					 "serde",
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[package]]
 | 
					[[package]]
 | 
				
			||||||
name = "serde_derive"
 | 
					name = "serde_derive"
 | 
				
			||||||
version = "1.0.189"
 | 
					version = "1.0.189"
 | 
				
			||||||
@@ -1191,6 +1200,7 @@ dependencies = [
 | 
				
			|||||||
 "parquet",
 | 
					 "parquet",
 | 
				
			||||||
 "rand",
 | 
					 "rand",
 | 
				
			||||||
 "serde",
 | 
					 "serde",
 | 
				
			||||||
 | 
					 "serde_arrays",
 | 
				
			||||||
 "serde_json",
 | 
					 "serde_json",
 | 
				
			||||||
 "tokio",
 | 
					 "tokio",
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,5 +12,6 @@ clap = { version = "4.4.5", features = ["derive"] }
 | 
				
			|||||||
parquet = "47.0.0"
 | 
					parquet = "47.0.0"
 | 
				
			||||||
rand = "0.8.5"
 | 
					rand = "0.8.5"
 | 
				
			||||||
serde = { version = "1.0.189", features = ["derive"] }
 | 
					serde = { version = "1.0.189", features = ["derive"] }
 | 
				
			||||||
 | 
					serde_arrays = "0.1.0"
 | 
				
			||||||
serde_json = "1.0.107"
 | 
					serde_json = "1.0.107"
 | 
				
			||||||
tokio = { version = "1.32.0", features = ["macros", "rt-multi-thread"] }
 | 
					tokio = { version = "1.32.0", features = ["macros", "rt-multi-thread"] }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -61,6 +61,7 @@ impl ChunkStorageCache {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        &self.cached_chunk_files[last_used_index]
 | 
					        &self.cached_chunk_files[last_used_index]
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// `fetch_chunk_by_pos` takes in the position of a chunk, and returns the
 | 
					    /// `fetch_chunk_by_pos` takes in the position of a chunk, and returns the
 | 
				
			||||||
    /// data of the chunk from disk
 | 
					    /// data of the chunk from disk
 | 
				
			||||||
    ///
 | 
					    ///
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,6 @@
 | 
				
			|||||||
use core::fmt;
 | 
					use core::fmt;
 | 
				
			||||||
use serde::ser;
 | 
					use serde::ser;
 | 
				
			||||||
 | 
					use serde::ser::{SerializeSeq, SerializeStruct, Serializer};
 | 
				
			||||||
use serde::Serialize;
 | 
					use serde::Serialize;
 | 
				
			||||||
use std::{
 | 
					use std::{
 | 
				
			||||||
    cmp::{max, min},
 | 
					    cmp::{max, min},
 | 
				
			||||||
@@ -31,12 +32,26 @@ impl ChunkPos {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[derive(Debug, Serialize)]
 | 
					#[derive(Debug)]
 | 
				
			||||||
pub struct ChunkData {
 | 
					pub struct ChunkData {
 | 
				
			||||||
    pub pos: ChunkPos,
 | 
					    pub pos: ChunkPos,
 | 
				
			||||||
    pub sections: [ChunkSection; SECTIONS_PER_CHUNK],
 | 
					    pub sections: [ChunkSection; SECTIONS_PER_CHUNK],
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl Serialize for ChunkData {
 | 
				
			||||||
 | 
					    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
 | 
				
			||||||
 | 
					    where
 | 
				
			||||||
 | 
					        S: serde::Serializer,
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        let mut seq = serializer.serialize_seq(Some(self.sections.len()))?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for section in self.sections {
 | 
				
			||||||
 | 
					            seq.serialize_element(§ion)?;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        seq.end()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl ChunkData {
 | 
					impl ChunkData {
 | 
				
			||||||
    pub fn new(pos: &ChunkPos) -> Self {
 | 
					    pub fn new(pos: &ChunkPos) -> Self {
 | 
				
			||||||
        ChunkData {
 | 
					        ChunkData {
 | 
				
			||||||
@@ -59,7 +74,7 @@ impl ChunkData {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// https://wiki.vg/Chunk_Format
 | 
					// https://wiki.vg/Chunk_Format
 | 
				
			||||||
#[derive(Clone, Copy)]
 | 
					#[derive(Clone, Copy, Serialize)]
 | 
				
			||||||
pub struct ChunkSection {
 | 
					pub struct ChunkSection {
 | 
				
			||||||
    /// The number of non-empty blocks in the section. If completely full, the
 | 
					    /// The number of non-empty blocks in the section. If completely full, the
 | 
				
			||||||
    /// section contains a 16 x 16 x 16 cube of blocks = 4096 blocks
 | 
					    /// section contains a 16 x 16 x 16 cube of blocks = 4096 blocks
 | 
				
			||||||
@@ -68,6 +83,7 @@ pub struct ChunkSection {
 | 
				
			|||||||
    /// The data for all the blocks in the chunk
 | 
					    /// The data for all the blocks in the chunk
 | 
				
			||||||
    /// The representation for this may be different based on the number of
 | 
					    /// The representation for this may be different based on the number of
 | 
				
			||||||
    /// non-empty blocks
 | 
					    /// non-empty blocks
 | 
				
			||||||
 | 
					    #[serde(with = "serde_arrays")]
 | 
				
			||||||
    block_states: [BlockID; 16 * 16 * 16],
 | 
					    block_states: [BlockID; 16 * 16 * 16],
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user