jsonpiler 0.10.4

a Json syntax programming language for Windows
Documentation
use crate::prelude::*;
#[derive(Debug, Clone, Copy, Default, Hash, PartialEq, Eq)]
pub(crate) struct Position {
  pub file: FileIdx,
  pub info: (bool, bool),
  pub line: u32,
  pub offset: u32,
  pub size: u32,
}
#[derive(Debug, Clone, Default)]
pub(crate) struct Pos<T> {
  pub pos: Position,
  pub val: T,
}
impl<T: Copy> Copy for Pos<T> {}
impl<T> Pos<T> {
  pub(crate) fn map<F: Fn(T) -> V, V>(self, map_f: F) -> Pos<V> {
    self.pos.with(map_f(self.val))
  }
  pub(crate) fn map_ref<F: Fn(&T) -> V, V>(&self, map_f: F) -> Pos<V> {
    self.pos.with(map_f(&self.val))
  }
}
impl Position {
  pub(crate) fn contains_inclusive(&self, file: FileIdx, offset: u32) -> bool {
    self.file == file && self.offset <= offset && offset <= self.end()
  }
  pub(crate) fn end(self) -> u32 {
    self.offset + self.size
  }
  #[expect(dead_code)]
  pub(crate) fn in_range(self, offset: u32) -> bool {
    self.offset <= offset && offset < self.end()
  }
  pub(crate) fn new(file: FileIdx) -> Self {
    Self { file, info: INFO_NONE, line: 0, offset: 0, size: 0 }
  }
  pub(crate) fn with<V>(self, val: V) -> Pos<V> {
    Pos { val, pos: self }
  }
}