// Copyright (c) 2012, 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.

library root_source;

import 'package.dart';
import 'pubspec.dart';
import 'source.dart';

/// A source used only for the root package when doing version resolution. It
/// contains only the root package and is unable to install packages.
///
/// This source cannot be referenced from a pubspec.
class RootSource extends Source {
  final String name = "root";
  final bool shouldCache = false;
  final Package package;

  RootSource(this.package);

  Future<Pubspec> describe(PackageId id) {
    return new Future<Pubspec>.immediate(package.pubspec);
  }

  Future<bool> install(PackageId id, String destPath) {
    throw new UnsupportedError("Can't install from a root source.");
  }
}
