use crate::prelude::internal::*;
mod parse;
pub use parse::*;
mod resolve;
pub use resolve::*;
mod error;
pub use error::*;
mod source;
pub use source::*;
#[derive(Debug, PartialEq, Clone, Serialize)]
pub enum GtpModule {
Initialized(GtpModuleSource),
Error(GtpModuleSource, GtpModuleError),
Parsed(Box<GtpModuleParse>),
Resolved(Box<GtpModuleResolved>),
}
impl GtpModule {
pub fn state_name(&self) -> &str {
match self {
GtpModule::Initialized(_) => "initialized",
GtpModule::Error(_, _) => "error",
GtpModule::Parsed(_) => "parsed",
GtpModule::Resolved(_) => "resolved",
}
}
pub fn module_parse(&self) -> Option<&GtModuleParse> {
self.project_module_parse().map(|parse| &parse.module_parse)
}
pub fn project_module_parse(&self) -> Option<&GtpModuleParse> {
match self {
GtpModule::Initialized(_) => None,
GtpModule::Error(_, _) => None,
GtpModule::Parsed(state) => Some(state),
GtpModule::Resolved(state) => Some(&state.project_module_parse),
}
}
pub fn path(&self) -> &GtpModulePath {
match self {
GtpModule::Initialized(source) => source.path(),
GtpModule::Error(source, _) => source.path(),
GtpModule::Parsed(state) => &state.path,
GtpModule::Resolved(state) => &state.project_module_parse.path,
}
}
pub fn source(&self) -> &GtpModuleSource {
match self {
GtpModule::Initialized(source) => source,
GtpModule::Error(source, _) => source,
GtpModule::Parsed(state) => &state.source,
GtpModule::Resolved(state) => &state.project_module_parse.source,
}
}
pub fn source_code(&self) -> Option<&str> {
match self {
GtpModule::Initialized(_) => None,
GtpModule::Error(_, _) => None,
GtpModule::Parsed(state) => Some(&state.source_code),
GtpModule::Resolved(state) => Some(&state.project_module_parse.source_code),
}
}
}