1use std::ops::RangeInclusive;
4
5use num::BigUint;
6use thiserror::Error;
7
8use super::{command::ObjId, prelude::*};
9
10#[derive(Debug, Clone, PartialEq, Eq, Hash, Error)]
12#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
13pub enum ParseError {
14 #[error("unexpected control flow {0}")]
16 UnexpectedControlFlow(&'static str),
17 #[error("random generated value out of range: expected {expected:?}, got {actual}")]
19 RandomGeneratedValueOutOfRange {
20 expected: RangeInclusive<BigUint>,
22 actual: BigUint,
24 },
25 #[error("switch generated value out of range: expected {expected:?}, got {actual}")]
27 SwitchGeneratedValueOutOfRange {
28 expected: RangeInclusive<BigUint>,
30 actual: BigUint,
32 },
33}
34
35pub type ParseErrorWithRange = SourceRangeMixin<ParseError>;
37
38#[derive(Debug, Clone, PartialEq, Eq, Hash, Error)]
40#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
41pub enum ParseWarning {
42 #[error("syntax error: {0}")]
44 SyntaxError(String),
45 #[error("undefined object: {0:?}")]
47 UndefinedObject(ObjId),
48 #[error("duplicating definition: {0}")]
50 DuplicatingDef(ObjId),
51 #[error("duplicating track object: {0} {1}")]
53 DuplicatingTrackObj(Track, Channel),
54 #[error("duplicating channel object: {0} {1}")]
56 DuplicatingChannelObj(ObjTime, Channel),
57 #[error("expected id format is base 62 (`0-9A-Za-z`)")]
59 OutOfBase62,
60}
61
62pub(crate) type Result<T> = core::result::Result<T, ParseWarning>;
64
65pub type ParseWarningWithRange = SourceRangeMixin<ParseWarning>;