oak_core/tree/
metadata.rs1use core::range::Range;
2#[cfg(feature = "serde")]
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, PartialEq, Eq, Hash)]
9#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
10pub struct TokenProvenance {
11 pub parts: Vec<ProvenancePart>,
13}
14
15#[derive(Debug, Clone, PartialEq, Eq, Hash)]
17#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
18pub enum ProvenancePart {
19 Source(#[cfg_attr(feature = "serde", serde(with = "crate::serde_range"))] Range<usize>),
21 Synthesized(String),
24 OpaqueTag(String),
27}
28
29impl TokenProvenance {
30 pub fn from_source(range: Range<usize>) -> Self {
32 Self { parts: vec![ProvenancePart::Source(range)] }
33 }
34
35 pub fn from_synthesized(s: impl Into<String>) -> Self {
37 Self { parts: vec![ProvenancePart::Synthesized(s.into())] }
38 }
39}