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``]";
}