use super::{Listing, Model};
#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub struct Records {
pub steps: Option<crate::reply::steps::Steps>,
pub files: Option<crate::reply::files::Files>,
pub rail: Option<crate::reply::rail::Rail>,
pub governing: Option<crate::reply::governing::Governing>,
pub agent: Option<crate::reply::agent::Agent>,
pub mail: Option<Vec<crate::reply::inbox::Row>>,
pub drilled: Option<crate::reply::step::Step>,
}
impl Model {
pub fn covered(&self) -> bool {
self.enroll.is_some()
|| self.tuning.is_some()
|| self.listing.is_some()
|| self.lookup.is_some()
|| self.login.is_some()
|| self.configuring.is_some()
|| self.fleet.is_some()
|| self.unmaking.is_some()
}
pub fn begin_records(&mut self) {
if self.conversation.is_some() {
self.stand(Listing::Records);
}
}
pub fn close_records(&mut self) {
self.put_down(Listing::Records);
}
pub(super) fn retire_records(&mut self) {
self.put_down(Listing::Records);
self.records = Records::default();
self.forking = crate::ui::Forking::default();
self.cascade = String::new();
}
pub fn post_cascade(&mut self) {
let (Some(aim), Some(agent)) = (self.aim.clone(), self.conversation.clone()) else {
return;
};
let armed = self
.records
.agent
.as_ref()
.is_some_and(|row| crate::ui::records::cascade::armed(row, &self.cascade));
if !armed {
return;
}
self.outbox.push(super::Posted::act(crate::verbs::stop(
aim.address,
agent,
true,
)));
}
}
#[cfg(test)]
mod tests;