use crate::{
node::{Node, Tokens},
private::Sealed,
tokenizer::{Position, TokenReference},
};
use full_moon_derive::Visit;
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, PartialEq, Eq, Visit)]
#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
pub struct ContainedSpan {
pub(crate) tokens: (TokenReference, TokenReference),
}
impl ContainedSpan {
pub fn new(start: TokenReference, end: TokenReference) -> Self {
Self {
tokens: (start, end),
}
}
pub fn tokens(&self) -> (&TokenReference, &TokenReference) {
(&self.tokens.0, &self.tokens.1)
}
}
impl Node for ContainedSpan {
fn start_position(&self) -> Option<Position> {
self.tokens.0.start_position()
}
fn end_position(&self) -> Option<Position> {
self.tokens.1.end_position()
}
fn similar(&self, other: &Self) -> bool {
self.tokens.0.similar(&other.tokens.0) && self.tokens.1.similar(&other.tokens.1)
}
fn tokens(&self) -> Tokens {
self.tokens.tokens()
}
}
impl Sealed for ContainedSpan {}