use super::super::transcript::{BlockKind, Transcript};
use crate::config::runtime::RuntimeConfig;
use crate::interactive::session_commands::SessionAction;
use crate::interactive::session_runtime::SessionRuntime;
pub(super) fn apply_grant_action(
action: SessionAction,
transcript: &mut Transcript,
runtime: &RuntimeConfig,
session: &mut SessionRuntime,
) -> bool {
match action {
SessionAction::Allow(tokens) => {
match crate::interactive::session_grants::allow(
&tokens,
&session.universe().approval_facts(runtime),
session.policy().grants(),
&session.journal(),
) {
Ok(message) => transcript.push(BlockKind::System, message),
Err(error) => transcript.push(BlockKind::Error, error),
}
}
SessionAction::Grants => {
transcript.push(
BlockKind::System,
crate::interactive::session_grants::listing(
session.policy().mode(),
session.policy().grants(),
),
);
}
_ => return false,
}
true
}