pub struct Namespace {
pub grassmannian: (usize, usize),
pub position: SchubertClass,
pub capabilities: Vec<Capability>,
pub name: String,
}Expand description
A namespace: a point in a Grassmannian with associated capabilities
In ShaperOS, namespaces represent isolated execution contexts. Their position in the Grassmannian encodes their “geometric location” while their capabilities determine what operations they can perform.
§Contracts
- All capabilities must be compatible with the namespace’s Grassmannian
- Capabilities must satisfy dependency ordering
- No two conflicting capabilities can coexist
Fields§
§grassmannian: (usize, usize)The Grassmannian this namespace lives in: Gr(k, n)
position: SchubertClassSchubert cell containing this namespace (its “position”)
capabilities: Vec<Capability>Capabilities granted to this namespace
name: StringHuman-readable name
Implementations§
Source§impl Namespace
impl Namespace
Sourcepub fn new(name: impl Into<String>, position: SchubertClass) -> Self
pub fn new(name: impl Into<String>, position: SchubertClass) -> Self
Create a new namespace at a given Schubert position
Sourcepub fn full(
name: impl Into<String>,
k: usize,
n: usize,
) -> EnumerativeResult<Self>
pub fn full( name: impl Into<String>, k: usize, n: usize, ) -> EnumerativeResult<Self>
Create a namespace with full access (identity Schubert class)
§Contract
requires: k < n
ensures: result.position.partition.is_empty()
ensures: result.grassmannian == (k, n)Sourcepub fn grant(&mut self, capability: Capability) -> Result<(), NamespaceError>
pub fn grant(&mut self, capability: Capability) -> Result<(), NamespaceError>
Grant a capability to this namespace
§Contract
requires: forall dep in capability.requires. self.has_capability(dep)
requires: forall conf in capability.conflicts. !self.has_capability(conf)
requires: forall existing in self.capabilities. !existing.conflicts.contains(capability.id)
ensures: self.has_capability(capability.id)§Errors
Returns NamespaceError::Conflict if the capability conflicts with an existing one.
Returns NamespaceError::MissingDependency if a required capability is missing.
Sourcepub fn grant_all(
&mut self,
capabilities: Vec<Capability>,
) -> Result<(), NamespaceError>
pub fn grant_all( &mut self, capabilities: Vec<Capability>, ) -> Result<(), NamespaceError>
Try to grant multiple capabilities in dependency order
This is a convenience method that attempts to grant capabilities in the order that satisfies dependencies.
Sourcepub fn revoke(&mut self, id: &CapabilityId) -> bool
pub fn revoke(&mut self, id: &CapabilityId) -> bool
Revoke a capability from this namespace
§Contract
requires: no other capability depends on this one
ensures: !self.has_capability(id)Returns true if the capability was revoked, false if it couldn’t be
(either not present or has dependents).
Sourcepub fn has_capability(&self, id: &CapabilityId) -> bool
pub fn has_capability(&self, id: &CapabilityId) -> bool
Check if this namespace has a specific capability
Sourcepub fn capability_ids(&self) -> Vec<CapabilityId>
pub fn capability_ids(&self) -> Vec<CapabilityId>
Get all capability IDs
Sourcepub fn capability_count(&self) -> usize
pub fn capability_count(&self) -> usize
Get the number of capabilities
Sourcepub fn count_configurations(&self) -> IntersectionResult
pub fn count_configurations(&self) -> IntersectionResult
Count valid configurations satisfying all capability constraints
This computes the intersection number of the position Schubert class with all capability Schubert classes.
§Contract
ensures:
- total_codim > dim(Gr) => Empty
- total_codim == dim(Gr) => Finite(n) where n >= 0
- total_codim < dim(Gr) => PositiveDimensionalSourcepub fn total_codimension(&self) -> usize
pub fn total_codimension(&self) -> usize
Total codimension of position plus all capabilities
Sourcepub fn would_overdetermine(&self, capability: &Capability) -> bool
pub fn would_overdetermine(&self, capability: &Capability) -> bool
Check if adding a capability would make the system overdetermined