From 8219f968f54fb9abfdc6983bdc546a7dccac9612 Mon Sep 17 00:00:00 2001 From: Adam Gausmann Date: Sat, 23 Oct 2021 22:55:20 -0500 Subject: [PATCH] Convert to a public API for now --- src/lib.rs | 87 +++++++++++++++++++++++++++--------------------------- 1 file changed, 44 insertions(+), 43 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 0b0e090..8c0439b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,77 +1,76 @@ use std::io::{Read, Write}; #[derive(Debug, Clone, Copy, PartialEq)] -#[non_exhaustive] pub enum SaveType { World, Subassembly, } #[derive(Debug)] -struct ModInfo { - mod_id: String, - mod_version: [i32; 4], +pub struct ModInfo { + pub mod_id: String, + pub mod_version: [i32; 4], } #[derive(Debug)] -struct ComponentType { - numeric_id: u16, - text_id: String, +pub struct ComponentType { + pub numeric_id: u16, + pub text_id: String, } #[derive(Debug)] -struct Input { - circuit_state_id: i32, +pub struct Input { + pub circuit_state_id: i32, } #[derive(Debug)] -struct Output { - circuit_state_id: i32, +pub struct Output { + pub circuit_state_id: i32, } #[derive(Debug)] -struct Component { - address: u32, - parent: u32, - type_id: u16, - position: [f32; 3], - rotation: [f32; 4], - inputs: Vec, - outputs: Vec, - custom_data: Option>, +pub struct Component { + pub address: u32, + pub parent: u32, + pub type_id: u16, + pub position: [f32; 3], + pub rotation: [f32; 4], + pub inputs: Vec, + pub outputs: Vec, + pub custom_data: Option>, } #[derive(Debug)] -struct PegAddress { - is_input: bool, - component_address: u32, - peg_index: i32, +pub struct PegAddress { + pub is_input: bool, + pub component_address: u32, + pub peg_index: i32, } #[derive(Debug)] -struct Wire { - start_peg: PegAddress, - end_peg: PegAddress, - circuit_state_id: i32, - rotation: f32, +pub struct Wire { + pub start_peg: PegAddress, + pub end_peg: PegAddress, + pub circuit_state_id: i32, + pub rotation: f32, } #[derive(Debug)] -enum CircuitStates { +pub enum CircuitStates { WorldFormat { circuit_states: Vec }, SubassemblyFormat { on_states: Vec }, } #[derive(Debug)] pub struct BlotterFile { - save_version: u8, - game_version: [i32; 4], - save_type: SaveType, - mods: Vec, - component_types: Vec, - components: Vec, - wires: Vec, - circuit_states: CircuitStates, + pub save_version: u8, + pub game_version: [i32; 4], + pub save_type: SaveType, + pub mods: Vec, + pub component_types: Vec, + pub components: Vec, + pub wires: Vec, + pub circuit_states: CircuitStates, } impl BlotterFile { @@ -108,7 +107,7 @@ impl BlotterFile { 1 => SaveType::World, 2 => SaveType::Subassembly, _ => { - return Err(Error::UnknownSaveType(save_type_id)); + return Err(Error::InvalidSave); } }; @@ -280,17 +279,20 @@ impl BlotterFile { write_f32(wire.rotation, writer)?; } - match &self.circuit_states { - CircuitStates::WorldFormat { circuit_states } => { + match (self.save_type, &self.circuit_states) { + (SaveType::World, CircuitStates::WorldFormat { circuit_states }) => { write_usize(circuit_states.len(), writer)?; writer.write_all(&circuit_states)?; } - CircuitStates::SubassemblyFormat { on_states } => { + (SaveType::Subassembly, CircuitStates::SubassemblyFormat { on_states }) => { write_usize(on_states.len(), writer)?; for &v in on_states { write_i32(v, writer)?; } } + _ => { + return Err(Error::InvalidSave); + } } writer.write_all(b"redstone sux lol")?; @@ -304,7 +306,6 @@ pub enum Error { IoError(std::io::Error), InvalidSave, IncompatibleVersion(u8), - UnknownSaveType(u8), } impl From for Error {