aboutsummaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
authorFuwn <[email protected]>2022-07-16 10:47:07 +0000
committerFuwn <[email protected]>2022-07-16 10:47:07 +0000
commitf63f2b749aa0ff4efdc367b514aba08c23dd7c89 (patch)
treee7d692aeff08cabc8d6d321aa05c4f0c25d7ca45 /src/main.rs
downloadsydney-f63f2b749aa0ff4efdc367b514aba08c23dd7c89.tar.xz
sydney-f63f2b749aa0ff4efdc367b514aba08c23dd7c89.zip
feat: initial release
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs106
1 files changed, 106 insertions, 0 deletions
diff --git a/src/main.rs b/src/main.rs
new file mode 100644
index 0000000..77841a9
--- /dev/null
+++ b/src/main.rs
@@ -0,0 +1,106 @@
+// This file is part of Germ <https://github.com/gemrest/sydney>.
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 3.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+//
+// Copyright (C) 2022-2022 Fuwn <[email protected]>
+// SPDX-License-Identifier: GPL-3.0-only
+
+#![deny(
+ warnings,
+ nonstandard_style,
+ unused,
+ future_incompatible,
+ rust_2018_idioms,
+ unsafe_code,
+ clippy::all,
+ clippy::nursery,
+ clippy::pedantic
+)]
+#![recursion_limit = "128"]
+
+mod app;
+mod command;
+mod input;
+mod stateful_list;
+mod ui;
+
+use app::App;
+use crossterm::{event, execute, terminal};
+
+fn main() -> Result<(), Box<dyn std::error::Error>> {
+ let mut args = std::env::args();
+ let mut app = App::new();
+
+ if let Some(arg) = args.nth(1) {
+ match arg.as_str() {
+ "--version" | "-v" => {
+ println!("{}", env!("CARGO_PKG_VERSION"));
+
+ return Ok(());
+ }
+ "--help" | "-h" => {
+ println!(
+ r#"usage: {} [option, capsule_uri]
+Options:
+ --version, -v show version text
+ --help, -h show help text
+
+Sample invocations:
+ {0} gemini://gem.rest/
+ {0} --help
+
+Report bugs to https://github.com/gemrest/sydney/issues"#,
+ args
+ .next()
+ .unwrap_or_else(|| env!("CARGO_PKG_NAME").to_string())
+ );
+
+ return Ok(());
+ }
+ _ => {
+ app.url = url::Url::parse(&arg)?;
+
+ app.make_request();
+ }
+ }
+ }
+
+ terminal::enable_raw_mode()?;
+
+ let mut stdout = std::io::stdout();
+
+ execute!(
+ stdout,
+ terminal::EnterAlternateScreen,
+ event::EnableMouseCapture
+ )?;
+
+ let mut terminal =
+ tui::Terminal::new(tui::backend::CrosstermBackend::new(stdout))?;
+ let result =
+ App::run(&mut terminal, app, std::time::Duration::from_millis(250));
+
+ terminal::disable_raw_mode()?;
+ execute!(
+ terminal.backend_mut(),
+ terminal::LeaveAlternateScreen,
+ event::DisableMouseCapture
+ )?;
+ terminal.show_cursor()?;
+
+ if let Err(err) = result {
+ println!("{:?}", err);
+ }
+
+ Ok(())
+}