1use serde::{Deserialize, Serialize};
2
3#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash, Serialize, Deserialize)]
5pub struct Span {
6 pub start: u32,
7 pub end: u32,
8}
9
10impl Span {
11 #[must_use]
17 pub fn new(start: usize, end: usize) -> Self {
18 Self {
19 start: u32::try_from(start).expect("span start exceeds u32"),
20 end: u32::try_from(end).expect("span end exceeds u32"),
21 }
22 }
23
24 #[must_use]
25 pub const fn len(self) -> u32 {
26 self.end - self.start
27 }
28
29 #[must_use]
30 pub const fn is_empty(self) -> bool {
31 self.start == self.end
32 }
33}
34
35#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
37#[serde(transparent)]
38pub struct NodeId(pub u32);