/// This is copied from Cargokit (which is the official way to use it currently) /// Details: https://fzyzcjy.github.io/flutter_rust_bridge/manual/integrate/builtin import 'dart:io'; import 'package:path/path.dart' as path; import 'package:toml/toml.dart'; class ManifestException { ManifestException(this.message, {required this.fileName}); final String? fileName; final String message; @override String toString() { if (fileName != null) { return 'Failed to parse package manifest at $fileName: $message'; } else { return 'Failed to parse package manifest: $message'; } } } class CrateInfo { CrateInfo({required this.packageName}); final String packageName; static CrateInfo parseManifest(String manifest, {final String? fileName}) { final toml = TomlDocument.parse(manifest); final package = toml.toMap()['package']; if (package == null) { throw ManifestException('Missing package section', fileName: fileName); } final name = package['name']; if (name == null) { throw ManifestException('Missing package name', fileName: fileName); } return CrateInfo(packageName: name); } static CrateInfo load(String manifestDir) { final manifestFile = File(path.join(manifestDir, 'Cargo.toml')); final manifest = manifestFile.readAsStringSync(); return parseManifest(manifest, fileName: manifestFile.path); } }