Skip to main content

sevenmark_parser/ast/
span.rs

1use serde::{Deserialize, Serialize};
2use std::collections::BTreeMap;
3
4use super::Element;
5
6/// 소스 코드 위치 정보 (바이트 오프셋)
7#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct Span {
9    pub start: usize,
10    pub end: usize,
11}
12
13impl Span {
14    pub fn new(start: usize, end: usize) -> Self {
15        Self { start, end }
16    }
17    /// Creates a synthesized span for elements generated during preprocessing
18    pub fn synthesized() -> Self {
19        Self { start: 0, end: 0 }
20    }
21}
22
23/// Individual parameter with span tracking
24#[derive(Debug, Clone, Serialize)]
25pub struct Parameter {
26    #[cfg_attr(not(feature = "include_locations"), serde(skip_serializing))]
27    pub span: Span,
28    pub key: String,
29    pub value: Vec<Element>,
30}
31
32/// 파라미터 맵: key-value 쌍으로 각 value는 Parameter 구조체 (span 포함)
33/// BTreeMap을 사용하여 키 순서를 일관되게 유지
34pub type Parameters = BTreeMap<String, Parameter>;