use powerio_core::{Error, PioModule, Source};
use crate::instance::McAcOpfInstance;
pub fn parse_bmopf_instance(source: Source) -> Result<PioModule<McAcOpfInstance>, Error> {
let source = match source.format() {
Some(_) => source,
None => source.with_format(powerio_core::FormatId::new("bmopf-json")?),
};
let mut module = powerio_dist::parse(source)?;
let retained = module.take_source();
let diagnostics = module.diagnostics().to_vec();
match module.try_map_value(McAcOpfInstance::from_network) {
Ok(mapped) => Ok(match retained {
Some(source) => mapped.with_source(source),
None => mapped,
}),
Err(error) => {
let error = error.with_diagnostics(diagnostics);
Err(match retained {
Some(source) => error.with_source(source),
None => error,
})
}
}
}