// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'dart:async';

import 'package:logging/logging.dart';
import 'package:vm_service/vm_service.dart';

VMRef toVMRef(VM vm) => VMRef(name: vm.name);

int _nextId = 0;
String createId() {
  _nextId++;
  return '$_nextId';
}

final _logger = Logger('Utilities');

void safeUnawaited(
  Future<void> future, {
  void Function(dynamic, StackTrace)? onError,
}) {
  onError ??= (error, stackTrace) =>
      _logger.warning('Error in unawaited Future:', error, stackTrace);
  unawaited(future.catchError(onError));
}
