mod display;
use super::*;
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum ParameterKind {
Expression,
Generic,
}
#[derive(Clone, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ParametersList {
pub kind: ParameterKind,
pub terms: Vec<ParameterTerm>,
}
#[derive(Clone, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum ParameterTerm {
LMark,
RMark,
Single {
annotations: AnnotationNode,
key: IdentifierNode,
bound: Option<ExpressionKind>,
default: Option<ExpressionKind>,
},
UnpackList {
modifiers: ModifierList,
key: IdentifierNode,
bound: Option<ExpressionKind>,
},
UnpackDict {
modifiers: ModifierList,
key: IdentifierNode,
bound: Option<ExpressionKind>,
},
}
impl ParametersList {
pub fn new(capacity: usize, kind: ParameterKind) -> Self {
Self { kind, terms: Vec::with_capacity(capacity) }
}
}
impl Default for ParameterKind {
fn default() -> Self {
Self::Expression
}
}
impl Default for ParametersList {
fn default() -> Self {
Self { kind: ParameterKind::default(), terms: vec![] }
}
}