anchor.diff:    return generateApiPackage(apiDescriptions, outputDirectory);
   }
   
  -Future<List<GenerateResult>> downloadDiscoveryDocuments(String outputDir) {
  +Future<List<GenerateResult>> downloadDiscoveryDocuments(
  +    String outputDir, {List<String> ids}) {
     var apiDescriptions = <RestDescription>[];
   
     return _discoveryClient.apis.list().then((DirectoryList list) {
       var futures = <Future>[];
       for (var item in list.items) {
  -      futures.add(_discoveryClient.apis.getRest(item.name, item.version)
  -          .then((doc) {
  -        apiDescriptions.add(doc);
  -      }));
  +      if (ids == null || ids.contains(item.id)) {
  +        futures.add(_discoveryClient.apis.getRest(item.name, item.version)
  +            .then((doc) {
  +          apiDescriptions.add(doc);
  +        }));
  +      }
       }
       return Future.wait(futures);
     }).then((_) {
  
positive.code:       print('Deleting directory $outputDir.');
        directory.deleteSync(recursive: true);
      }
      directory.createSync();
  
      for (var description in apiDescriptions) {
        var name = '$outputDir/${description.name}__${description.version}.json';
  
negative.code: part "src/namer.dart";
  part "src/utils.dart";
  part "src/uri_template.dart";
  
  
  Future<List<DirectoryListItems>> listAllApis() {
    return _discoveryClient.apis.list().then((DirectoryList list) {
      return list.items;
    });
  }
  
  List<GenerateResult> generateApiPackage(
      List<RestDescription> descriptions, String outputDirectory) {
  