pub(crate) mod read;
mod write;
pub(crate) use write::emit_pmd_json_text;
use powerio_core::{PioModule, Source, TimeSeries};
use crate::MulticonductorNetwork;
#[must_use]
pub fn is_multinetwork(source: &Source) -> bool {
crate::convert::primary(source).is_ok_and(|buffer| {
crate::convert::source_text(&buffer).is_ok_and(read::text_is_multinetwork)
})
}
pub fn parse_multinetwork(
source: Source,
) -> Result<PioModule<TimeSeries<MulticonductorNetwork>>, powerio_core::Error> {
let mut warnings = crate::collect::Diagnostics::new();
let parsed = crate::convert::primary(&source).and_then(|buffer| {
read::parse_pmd_multinetwork_collecting(
crate::convert::source_text(&buffer)?,
&mut warnings,
)
});
match parsed {
Ok(series) => {
let source = match powerio_core::FormatId::new("pmd-json") {
Ok(format) => source.with_format(format),
Err(_) => source,
};
PioModule::parsed(series, source, warnings.into_records())
}
Err(error) => {
let core = powerio_core::Error::new(error.code(), error.to_string());
Err(core
.with_diagnostics(warnings.into_records())
.with_cause(error)
.with_source(source))
}
}
}