toJson method

Map<String, dynamic> toJson()

Implementation

Map<String, dynamic> toJson() {
  final received = raw?.toJson() ?? const <String, Object?>{};
  // What was received under [capability].[sub], when it is declared.
  Map<String, dynamic> part(String capability, String sub) {
    final c = received[capability];
    final v = c is Map ? c[sub] : null;
    return v is Map ? Map<String, dynamic>.from(v) : <String, dynamic>{};
  }

  const named = {'roots', 'sampling', 'elicitation', 'tasks', 'experimental', 'extensions'};
  return {
    for (final e in received.entries)
      if (!named.contains(e.key)) e.key: e.value,
    if (rootsDeclared) 'roots': {if (rootsListChanged) 'listChanged': true},
    if (samplingDeclared)
      'sampling': {
        if (samplingContext) 'context': part('sampling', 'context'),
        if (samplingTools) 'tools': part('sampling', 'tools'),
      },
    if (elicitationDeclared)
      'elicitation': {
        if (elicitationForm) 'form': part('elicitation', 'form'),
        if (elicitationUrl) 'url': part('elicitation', 'url'),
      },
    if (tasks != null) 'tasks': tasks,
    if (experimental != null && experimental!.isNotEmpty) 'experimental': experimental,
    if (extensions != null && extensions!.isNotEmpty) 'extensions': extensions,
  };
}