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

/// Make it possible to load resources, independent of how the Dart app is run.
///
///     Future<String> getTemplateFile(String templatePath) {
///       return loadAsString('package:dartdoc/templates/$templatePath');
///     }
///
library dartdoc.resource_loader;

import 'dart:async' show Future;
import 'dart:convert' show utf8;

import 'package:resource/resource.dart';

/// Loads a `package:` resource as a String.
Future<String> loadAsString(String path) async {
  var bytes = await loadAsBytes(path);

  return utf8.decode(bytes);
}

/// Loads a `package:` resource as an [List<int>].
Future<List<int>> loadAsBytes(String path) async {
  if (!path.startsWith('package:')) {
    throw new ArgumentError('path must begin with package:');
  }

  Uri uri = Uri.parse(path);
  return await ResourceLoader.defaultLoader.readAsBytes(uri);
}
