pub struct Capabilities { /* private fields */ }Expand description
What a draft can express, queryable before a run.
Implementations§
Source§impl Capabilities
impl Capabilities
Sourcepub fn for_draft(draft: DraftVersion) -> Self
pub fn for_draft(draft: DraftVersion) -> Self
The capability table for a draft.
Sourcepub fn supports(&self, site: Site, kind: ActionKind) -> Support
pub fn supports(&self, site: Site, kind: ActionKind) -> Support
Whether kind is available at site, with no per-unit facts.
At Site::Object this is the subgroup-stream column;
Self::supports_on answers for a named stream kind.
Sourcepub fn supports_on(
&self,
site: Site,
kind: ActionKind,
stream_kind: DataStreamType,
) -> Support
pub fn supports_on( &self, site: Site, kind: ActionKind, stream_kind: DataStreamType, ) -> Support
Whether kind is available at site for a given stream kind.
Sourcepub fn supports_matcher(&self, kind: MatchKind, field: MatcherKey) -> bool
pub fn supports_matcher(&self, kind: MatchKind, field: MatcherKey) -> bool
Whether a shaping rule keyed on field can ever claim a unit
arriving as kind. supports_matcher, bound to this draft.
Sourcepub fn admit_class(
&self,
class: &ClassRule,
) -> Result<(), UnsupportedMatcherKey>
pub fn admit_class( &self, class: &ClassRule, ) -> Result<(), UnsupportedMatcherKey>
Admit one class rule, or refuse it naming the draft and the key.
The first key the rule names that supports_matcher answers
false for is the refusal, in the order the keys are declared on
Matcher — the same first-match convention
ShapeProfile::try_new uses for
ShapeError::InertMatcher,
so a rule with two dead keys reports the one an author reading their
own configuration top to bottom reaches first.
§A rule that names no stream kind is judged against both
Matcher::stream_kind is optional, and a rule that omits it claims
units of any kind. Such a rule is refused only when its key is
carried by none of them, because refusing it for being dead on fetch
alone would reject a rule that shapes subgroup traffic perfectly well
— and a false rejection here is worse than the silence this exists to
end, since it rejects a configuration that works.
Sourcepub fn admit_profile(
&self,
profile: &ShapeProfile,
) -> Result<(), UnsupportedMatcherKey>
pub fn admit_profile( &self, profile: &ShapeProfile, ) -> Result<(), UnsupportedMatcherKey>
Admit every class in a profile, or refuse at the first dead key.
The pre-run check ShapeProfile::try_new cannot make: that
constructor validates the configuration alone and has no draft, so a
rule keyed on something the negotiated draft does not carry is valid
to it. This is the same question asked once a draft is known.
§A session asks it twice, and the second time is not redundant
Once before it dials, against the draft it is about to frame with, which is the only moment a profile can be refused with nothing yet forwarded. And once more when the peers name a draft, which drafts 07 to 14 do in their SETUP rather than in the ALPN they share — so for that cohort the first answer was given about a configured guess and the second is given about the session actually running. The two differ only where a draft this build did not compile is involved, and that is exactly the case where every rule in the profile is dead.
Trait Implementations§
Source§impl Clone for Capabilities
impl Clone for Capabilities
Source§fn clone(&self) -> Capabilities
fn clone(&self) -> Capabilities
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more