//
// Copyright (c) 2008, Brian Frank and Andy Frank
// Licensed under the Academic Free License version 3.0
//
// History:
//   28 Aug 08  Brian Frank  Creation
//

**
** UriSchemes are registered to handle a specific Uri scheme such
** as "file" or "http".  Scheme handlers are registered using the pod
** index key "sys.uriScheme.{scheme}={qname}" where "scheme" is
** lowercase scheme name and "qname" is the qualified type name
** of the subclass.  See [docLang]`docLang::Naming` for the details
** of how scheme handling works.
**
abstract const class UriScheme
{

  **
  ** Lookup a UriScheme for the specified scheme name.
  ** Scheme name must be lower case - note that `Uri.scheme`
  ** is always normalized to lower case.  If the scheme is
  ** not mapped and checked is true then throw UnresolvedErr
  ** otherwise return null.
  **
  static UriScheme? find(Str scheme, Bool checked := true)

  **
  ** Default implementation returns type qname.
  **
  override Str toStr()

  **
  ** Resolve the uri to a Fantom object.  If uri cannot
  ** be resolved by this scheme then throw UnresolvedErr.
  **
  abstract Obj? get(Uri uri, Obj? base)

}

**************************************************************************
** FanScheme
**************************************************************************

internal const class FanScheme : UriScheme
{
  override Obj? get(Uri uri, Obj? base)
}

**************************************************************************
** FileScheme
**************************************************************************

internal const class FileScheme : UriScheme
{
  override Obj? get(Uri uri, Obj? base)
}