use crate::{Expression, Path, Type};
use itertools::Itertools as _;
use serde::{Deserialize, Serialize};
use std::fmt;
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct CompositeType {
pub path: Path,
pub const_arguments: Vec<Expression>,
}
impl fmt::Display for CompositeType {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}", self.path)?;
if !self.const_arguments.is_empty() {
write!(f, "::[{}]", self.const_arguments.iter().format(", "))?;
}
Ok(())
}
}
impl From<CompositeType> for Type {
fn from(value: CompositeType) -> Self {
Type::Composite(value)
}
}