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

/**
 * A utility class used to convert between URIs and absolute file paths.
 */
abstract class UriConverter {
  /**
   * Return the URI that should be used to reference the file at the absolute
   * [path], or `null` if there is no valid way to reference the file in this
   * converter’s context. The file at that path is not required to exist.
   *
   * If a [containingPath] is provided and both the [path] and [containingPath]
   * are within the root of this converter’s context, then the returned URI will
   * be a relative path. Otherwise, the returned URI will be an absolute URI.
   *
   * Throws an `ArgumentError` if the [path] is `null` or is not a valid
   * absolute file path.
   */
  Uri pathToUri(String path, {String containingPath});

  /**
   * Return the absolute path of the file to which the absolute [uri] resolves,
   * or `null` if the [uri] cannot be resolved in this converter’s context.
   *
   * Throws an `ArgumentError` if the [uri] is `null` or is not an absolute URI.
   */
  String uriToPath(Uri uri);
}
