    import ceylon.language.meta.declaration {
        Module
    }

    "A file packaged within a module. A `Resource` may be
     obtained by calling [[Module.resourceByPath]]. For example:

         Module mod = `module com.redhat.example`;
         assert (exists resource
            = mod.resourceByPath(\"com/redhat/example/file.txt\"));
         print(resource.textContent());"
    by("Enrique Zamudio")
    see (`function Module.resourceByPath`)
    shared interface Resource {

        "The name of the resource; usually the filename."
        shared default String name {
            value pos = uri.lastOccurrence('/');
            if (exists pos) {
                return uri[pos+1...];
            }
            return uri;
        }

        "The size of the resource, in bytes."
        shared formal Integer size;

        "The full path to the resource, expressed as a URI. For
         a resource packaged within a module archive, this
         includes both the path to the module archive file, and
         the path of the resource within the module archive."
        shared formal String uri;

        "Retrieves the contents of the resource as a [[String]],
         using the specified encoding."
        shared formal String textContent(String encoding="UTF-8");

        string => "``className(this)``[``uri``]";
    }