spimdisasm 2.0.0-alpha.1

MIPS disassembler
Documentation
/* SPDX-FileCopyrightText: © 2024-2025 Decompollaborate */
/* SPDX-License-Identifier: MIT */

#[cfg(feature = "pyo3")]
use pyo3::prelude::*;

use crate::{
    addresses::{Rom, Vram},
    metadata::OverlayCategoryName,
};

#[derive(Debug, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)]
#[cfg_attr(feature = "pyo3", pyclass(module = "spimdisasm"))]
// TODO: consider changing rom and vram to RomVramRange
pub struct ParentSegmentInfo {
    segment_rom: Rom,
    segment_vram: Vram,
    overlay_category_name: Option<OverlayCategoryName>,
}
impl ParentSegmentInfo {
    pub const fn new(
        segment_rom: Rom,
        segment_vram: Vram,
        overlay_category_name: Option<OverlayCategoryName>,
    ) -> Self {
        Self {
            segment_rom,
            segment_vram,
            overlay_category_name,
        }
    }

    pub const fn segment_rom(&self) -> Rom {
        self.segment_rom
    }
    pub const fn segment_vram(&self) -> Vram {
        self.segment_vram
    }
    pub const fn overlay_category_name(&self) -> Option<&OverlayCategoryName> {
        self.overlay_category_name.as_ref()
    }
}

#[cfg(feature = "pyo3")]
pub(crate) mod python_bindings {
    use super::*;

    #[pymethods]
    impl ParentSegmentInfo {
        #[new]
        // https://pyo3.rs/v0.23.2/function/signature.html#trailing-optional-arguments
        #[pyo3(signature = (segment_rom, segment_vram, overlay_category_name))]
        pub fn py_new(
            segment_rom: Rom,
            segment_vram: Vram,
            overlay_category_name: Option<OverlayCategoryName>,
        ) -> Self {
            Self::new(segment_rom, segment_vram, overlay_category_name)
        }
    }
}