msla_format 0.2.0

Library for encoding and decoding various MSLA file formats: Elegoo (.goo), Chitu Encrypted (.ctb), NanoDLP (.nanodlp).
Documentation
use crate::{
    serde::SizedString,
    units::{Milimeters, MilimetersPerMinute, Seconds},
};

use crate::goo::{Header, Layer, PreviewImage, header::ExposureDelayMode};

impl Default for Header {
    fn default() -> Self {
        Self {
            version: SizedString::new(b"V3.0"),
            software_info: SizedString::new(b"msla_format by Connor Slade"),
            software_version: SizedString::new(b"0.1.0"),
            file_time: SizedString::new(b""),
            printer_name: SizedString::new(b"standard"),
            printer_type: SizedString::new(b"Default"),
            profile_name: SizedString::new(b"New Script"),
            anti_aliasing_level: 0,
            grey_level: 0,
            blur_level: 0,
            small_preview: PreviewImage::empty(),
            big_preview: PreviewImage::empty(),
            layer_count: 171,
            x_resolution: 11520,
            y_resolution: 5102,
            x_mirror: false,
            y_mirror: false,
            x_size: Milimeters::new(218.88),
            y_size: Milimeters::new(122.88),
            z_size: Milimeters::new(260.0),
            layer_thickness: Milimeters::new(0.05),
            exposure_time: Seconds::new(3.0),
            exposure_delay_mode: ExposureDelayMode::StaticTime,
            turn_off_time: Seconds::new(0.0),
            bottom_before_lift_time: Seconds::new(0.0),
            bottom_after_lift_time: Seconds::new(0.0),
            bottom_after_retract_time: Seconds::new(0.0),
            before_lift_time: Seconds::new(0.0),
            after_lift_time: Seconds::new(0.0),
            after_retract_time: Seconds::new(0.0),
            bottom_exposure_time: Seconds::new(50.0),
            bottom_layers: 8,
            bottom_lift_distance: Milimeters::new(5.0),
            bottom_lift_speed: MilimetersPerMinute::new(65.0),
            lift_distance: Milimeters::new(5.0),
            lift_speed: MilimetersPerMinute::new(65.0),
            bottom_retract_distance: Milimeters::new(5.0),
            bottom_retract_speed: MilimetersPerMinute::new(150.0),
            retract_distance: Milimeters::new(5.0),
            retract_speed: MilimetersPerMinute::new(0.0),
            bottom_second_lift_distance: Milimeters::new(0.0),
            bottom_second_lift_speed: MilimetersPerMinute::new(0.0),
            second_lift_distance: Milimeters::new(0.0),
            second_lift_speed: MilimetersPerMinute::new(0.0),
            bottom_second_retract_distance: Milimeters::new(0.0),
            bottom_second_retract_speed: MilimetersPerMinute::new(0.0),
            second_retract_distance: Milimeters::new(0.0),
            second_retract_speed: MilimetersPerMinute::new(0.0),
            bottom_light_pwm: 255,
            light_pwm: 255,
            per_layer_settings: false,
            printing_time: 2659,
            total_volume: 526.507,
            total_weight: 0.684,
            total_price: 0.0,
            price_unit: SizedString::new(b"$"),
            grey_scale_level: true,
            transition_layers: 10,
        }
    }
}

impl Default for Layer {
    fn default() -> Self {
        Self {
            pause: false,
            pause_position_z: Milimeters::new(200.0),
            layer_position_z: Milimeters::new(0.05),
            layer_exposure_time: Seconds::new(50.0),
            layer_off_time: Seconds::new(0.0),
            before_lift_time: Seconds::new(0.0),
            after_lift_time: Seconds::new(0.0),
            after_retract_time: Seconds::new(0.0),
            lift_distance: Milimeters::new(5.0),
            lift_speed: MilimetersPerMinute::new(65.0),
            second_lift_distance: Milimeters::new(0.0),
            second_lift_speed: MilimetersPerMinute::new(0.0),
            retract_distance: Milimeters::new(5.0),
            retract_speed: MilimetersPerMinute::new(150.0),
            second_retract_distance: Milimeters::new(0.0),
            second_retract_speed: MilimetersPerMinute::new(0.0),
            light_pwm: 255,
            data: Vec::new(),
            checksum: 0,
        }
    }
}