NetlistSchematicAdapter.fromJson constructor

NetlistSchematicAdapter.fromJson(
  1. String netlistJson, {
  2. HierarchyService? externalHierarchy,
})

Parse a Yosys-compatible JSON netlist into hierarchy and schematic data.

Implementation

factory NetlistSchematicAdapter.fromJson(
  String netlistJson, {
  HierarchyService? externalHierarchy,
}) {
  final decoded = jsonDecode(netlistJson) as Map<String, dynamic>;
  final creator = _readMetadataString(decoded['creator']);
  final version = _readMetadataString(decoded['version']);
  final modulesJson = decoded['modules'] as Map<String, dynamic>?;
  if (modulesJson == null || modulesJson.isEmpty) {
    throw const FormatException('Yosys JSON contained no modules');
  }

  final modules = <String, _YosysModule>{};
  for (final entry in modulesJson.entries) {
    modules[entry.key] = _YosysModule(entry.key, entry.value);
  }

  final topName = _topModuleName(modules);
  final builder = _SchematicBuilder(
    modules: modules,
    externalHierarchy: externalHierarchy,
  );
  final result = builder.build(topName);

  return NetlistSchematicAdapter._(
    hierarchy: externalHierarchy ?? result.hierarchy,
    schematic: result.graph,
    embeddedFlcData: FlcData.fromNetlistJson(decoded),
    netlistCreator: creator,
    netlistVersion: version,
  );
}