use serde::ser::SerializeStruct;
use serde::{Serialize, Serializer};
const SHORTHAND_SPAN_SERIALISATION: bool = true;
#[derive(PartialEq, Debug, Clone)]
pub struct Span {
pub start: usize,
pub end: usize,
}
impl Span {
pub fn new(start: usize, end: usize) -> Span {
Span { start, end }
}
}
impl Serialize for Span {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
if SHORTHAND_SPAN_SERIALISATION {
serializer.serialize_str(&format!("{}..{}", self.start, self.end))
} else {
let mut state = serializer.serialize_struct("Span", 2)?;
state.serialize_field("start", &self.start)?;
state.serialize_field("end", &self.end)?;
state.end()
}
}
}
pub trait GetSpan {
fn span(&self) -> &Span;
}