1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// McFunction-Debugger is a debugger for Minecraft's *.mcfunction files that does not require any
// Minecraft mods.
//
// © Copyright (C) 2021-2023 Adrodoc <adrodoc55@googlemail.com> & skess42 <skagaros@gmail.com>
//
// This file is part of McFunction-Debugger.
//
// McFunction-Debugger is free software: you can redistribute it and/or modify it under the terms of
// the GNU General Public License as published by the Free Software Foundation, either version 3 of
// the License, or (at your option) any later version.
//
// McFunction-Debugger is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along with McFunction-Debugger.
// If not, see <http://www.gnu.org/licenses/>.

pub mod adapter;

use crate::{
    config::adapter::{AdapterConfig, BreakpointKind, BreakpointPositionInLine},
    parser::command::resource_location::ResourceLocation,
};

pub struct Config<'l> {
    pub namespace: &'l str,
    pub shadow: bool,
    pub adapter: Option<AdapterConfig<'l>>,
}
impl Config<'_> {
    pub(crate) fn get_breakpoint_kind(
        &self,
        function: &ResourceLocation,
        line_number: usize,
        position_in_line: BreakpointPositionInLine,
    ) -> Option<&BreakpointKind> {
        if let Some(config) = self.adapter.as_ref() {
            if let Some(vec) = config.breakpoints.get_vec(function) {
                return vec
                    .iter()
                    .filter(|breakpoint| breakpoint.position.line_number == line_number)
                    .filter(|breakpoint| breakpoint.position.position_in_line == position_in_line)
                    .next()
                    .map(|it| &it.kind);
            }
        }
        None
    }
}