33 lines
1.3 KiB
Go
33 lines
1.3 KiB
Go
package configkit
|
|
|
|
import "io/fs"
|
|
|
|
// ResourceContext provides a passive rooted filesystem view and a
|
|
// slash-relative BaseDir for one acquired source. FS is borrowed: caller-owned
|
|
// filesystems remain under caller control, and host files are opened afresh.
|
|
// Querying this record performs no I/O. Resource contents may change after
|
|
// loading; callers must close files they open through FS.
|
|
type ResourceContext struct {
|
|
FS fs.FS
|
|
BaseDir string
|
|
}
|
|
|
|
// SourceContext returns the context of an acquired source ID. Unknown IDs and
|
|
// sources without context return false. It is nil-safe and performs no I/O.
|
|
// Follow individual origin locations when an origin has multiple sources.
|
|
func (r *Result[T]) SourceContext(id string) (ResourceContext, bool) {
|
|
if r == nil || r.inspection == nil {
|
|
return ResourceContext{}, false
|
|
}
|
|
context, ok := r.inspection.SourceContext(id)
|
|
return ResourceContext{FS: context.FS, BaseDir: context.BaseDir}, ok
|
|
}
|
|
|
|
// SourceContext returns a passive source context during the active resolution
|
|
// callback. Like other Resolution queries, it cannot be used after callback
|
|
// return and performs no filesystem operations itself.
|
|
func (r *Resolution) SourceContext(id string) (ResourceContext, bool) {
|
|
context, ok := r.engineContext().SourceContext(id)
|
|
return ResourceContext{FS: context.FS, BaseDir: context.BaseDir}, ok
|
|
}
|