CockpitOperationInvocation constructor

CockpitOperationInvocation({
  1. required String kind,
  2. Map<String, Object?> input = const <String, Object?>{},
  3. String? rootId,
  4. String? workspaceId,
  5. CockpitIdempotencyKey? idempotencyKey,
  6. DateTime? deadline,
  7. Iterable<String> requiredFeatures = const <String>[],
})

Creates a CockpitOperationInvocation.

Implementation

CockpitOperationInvocation({
  required this.kind,
  Map<String, Object?> input = const <String, Object?>{},
  this.rootId,
  this.workspaceId,
  this.idempotencyKey,
  this.deadline,
  Iterable<String> requiredFeatures = const <String>[],
}) : input = CockpitFoundationValueReader.jsonObject(input, r'$.input'),
     requiredFeatures = List<String>.unmodifiable(requiredFeatures) {
  CockpitFoundationValueReader.kind(kind, r'$.kind');
  if (rootId != null) {
    CockpitFoundationValueReader.id(rootId, r'$.rootId');
  }
  if (workspaceId != null) {
    CockpitFoundationValueReader.id(workspaceId, r'$.workspaceId');
  }
  if (deadline != null) {
    CockpitFoundationValueReader.utcDateTime(deadline!, r'$.deadline');
    if (!deadline!.isAfter(
      DateTime.fromMillisecondsSinceEpoch(0, isUtc: true),
    )) {
      throw const FormatException('Operation deadline is invalid.');
    }
  }
  final features = <String>{};
  for (final feature in this.requiredFeatures) {
    CockpitFoundationValueReader.id(feature, r'$.requiredFeatures[]');
    if (!features.add(feature)) {
      throw FormatException('Duplicate required feature $feature.');
    }
  }
}