cargo_move/
application.rs1use crate::{commands::CargoMoveCmd, config::CargoMoveConfig};
4use abscissa_core::{
5 application, config, logging, Application, EntryPoint, FrameworkError, StandardPaths,
6};
7use lazy_static::lazy_static;
8
9lazy_static! {
10 pub static ref APPLICATION: application::Lock<CargoMoveApp> = application::Lock::default();
12}
13
14pub fn app_reader() -> application::lock::Reader<CargoMoveApp> {
18 APPLICATION.read()
19}
20
21pub fn app_writer() -> application::lock::Writer<CargoMoveApp> {
23 APPLICATION.write()
24}
25
26pub fn app_config() -> config::Reader<CargoMoveApp> {
30 config::Reader::new(&APPLICATION)
31}
32
33#[derive(Debug)]
35pub struct CargoMoveApp {
36 config: Option<CargoMoveConfig>,
38
39 state: application::State<Self>,
41}
42
43impl Default for CargoMoveApp {
48 fn default() -> Self {
49 Self {
50 config: None,
51 state: application::State::default(),
52 }
53 }
54}
55
56impl Application for CargoMoveApp {
57 type Cmd = EntryPoint<CargoMoveCmd>;
59
60 type Cfg = CargoMoveConfig;
62
63 type Paths = StandardPaths;
65
66 fn config(&self) -> &CargoMoveConfig {
68 self.config.as_ref().expect("config not loaded")
69 }
70
71 fn state(&self) -> &application::State<Self> {
73 &self.state
74 }
75
76 fn state_mut(&mut self) -> &mut application::State<Self> {
78 &mut self.state
79 }
80
81 fn register_components(&mut self, command: &Self::Cmd) -> Result<(), FrameworkError> {
87 let components = self.framework_components(command)?;
88 self.state.components.register(components)
89 }
90
91 fn after_config(&mut self, config: Self::Cfg) -> Result<(), FrameworkError> {
97 self.state.components.after_config(&config)?;
99 self.config = Some(config);
100 Ok(())
101 }
102
103 fn logging_config(&self, command: &EntryPoint<CargoMoveCmd>) -> logging::Config {
105 if command.verbose {
106 logging::Config::verbose()
107 } else {
108 logging::Config::default()
109 }
110 }
111}