#![feature(new_range_api)]
#![warn(missing_docs)]
#![doc = include_str!("readme.md")]
use core::range::Range;
use oak_core::{
language::{Language, UniversalElementRole},
tree::RedNode,
};
#[derive(Debug, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct StructureItem {
pub name: String,
pub detail: Option<String>,
pub role: UniversalElementRole,
#[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range", bound(serialize = "", deserialize = "")))]
pub range: Range<usize>,
#[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range", bound(serialize = "", deserialize = "")))]
pub selection_range: Range<usize>,
pub deprecated: bool,
pub children: Vec<StructureItem>,
}
pub trait StructureProvider<L: Language> {
fn structure(&self, root: &RedNode<L>) -> Vec<StructureItem>;
}