Info.fromJson constructor

Info.fromJson(
  1. Map<String, dynamic> json
)

Implementation

factory Info.fromJson(Map<String, dynamic> json) {
  try {
    // Handle version field - can be either Map or String
    Version version;
    if (json['version'] is Map) {
      version = Version.fromJson(json['version'] as Map<String, dynamic>);
    } else {
      // If it's a string, create a basic Version object
      final versionStr = json['version'] as String;
      version = Version(
        semver: versionStr,
        major: 0,
        minor: 0,
        patch: 0,
      );
    }

    // Handle git field safely
    Git git;
    if (json['git'] is Map) {
      git = Git.fromJson(json['git'] as Map<String, dynamic>);
    } else if (json['git'] is String) {
      git = Git(
        branch: 'unknown',
        commit: json['git'] as String,
        commitTime: 0,
      );
    } else {
      git = Git(branch: 'unknown', commit: 'unknown', commitTime: 0);
    }

    return Info(
      version: version,
      buildTime: json['buildTime'] as int,
      git: git,
      jvm: json['jvm'] as String,
      lavaplayer: json['lavaplayer'] as String,
      sourceManagers: (json['sourceManagers'] as List)
          .map((e) => e.toString())
          .toList(),
      plugins: (json['plugins'] as List)
          .map((e) => Plugin.fromJson(e as Map<String, dynamic>))
          .toList(),
    );
  } catch (e) {
    throw Exception('Failed to parse Info: $e\nJSON: $json');
  }
}