use std::path::PathBuf;
#[derive(Clone, Debug, PartialEq)]
pub(crate) enum GleamType {
String,
Int,
Float,
Bool,
List(Box<GleamType>),
Named {
type_name: String,
fn_prefix: String,
},
}
#[derive(Clone, Debug, PartialEq)]
pub(crate) struct Field {
pub(crate) wire: String,
pub(crate) ty: GleamType,
pub(crate) required: bool,
}
#[derive(Clone, Debug, PartialEq)]
pub(crate) struct RecordDef {
pub(crate) type_name: String,
pub(crate) fn_prefix: String,
pub(crate) fields: Vec<Field>,
}
#[derive(Clone, Debug, PartialEq)]
pub(crate) struct EnumVariant {
pub(crate) constructor: String,
pub(crate) wire: String,
}
#[derive(Clone, Debug, PartialEq)]
pub(crate) struct EnumDef {
pub(crate) type_name: String,
pub(crate) fn_prefix: String,
pub(crate) variants: Vec<EnumVariant>,
}
#[derive(Clone, Debug, PartialEq)]
pub(crate) enum TypeDef {
Record(RecordDef),
Enum(EnumDef),
}
impl TypeDef {
pub(crate) fn type_name(&self) -> &str {
match self {
TypeDef::Record(record) => &record.type_name,
TypeDef::Enum(definition) => &definition.type_name,
}
}
}
#[derive(Clone, Debug, PartialEq)]
pub struct BoundaryType {
pub(crate) file: PathBuf,
pub(crate) stem: String,
pub(crate) root: GleamType,
pub(crate) defs: Vec<TypeDef>,
}