use SessionError;
/// Immutable scope requirements selected by a protected application operation.
/// Validate once at configuration/operation setup and reconstruct after decoding.
/// This proves grammar and bounds only: every call still checks the current
/// authority, session, revocation and scope membership. Empty sets, duplicates
/// and arbitrary order are accepted, as with raw operation requirements.
/// Requirements cannot be edited without re-admission:
/// ```compile_fail
/// use ic_auth::session::RequiredScopes;
/// fn change(scopes: &mut RequiredScopes) {
/// scopes.as_slice()[0].clear();
/// }
/// ```
;