summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
authorFxQnLr <[email protected]>2024-02-25 16:14:56 +0100
committerFxQnLr <[email protected]>2024-02-25 16:14:56 +0100
commit03bea24f9de698375033af92a08762446d0e20cc (patch)
tree71b696ddcdc14f36115155be7f287fc0cb43e16d /src/main.rs
parentcd73d51fba4a7d24b5ef12cb7d23054ab922cb67 (diff)
downloadwebol-cli-03bea24f9de698375033af92a08762446d0e20cc.tar
webol-cli-03bea24f9de698375033af92a08762446d0e20cc.tar.gz
webol-cli-03bea24f9de698375033af92a08762446d0e20cc.zip
Closes #2. Config and setup stuff
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs84
1 files changed, 45 insertions, 39 deletions
diff --git a/src/main.rs b/src/main.rs
index afe6fac..0393183 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,11 +1,11 @@
1use std::{fmt::Display, time::Duration}; 1use std::{fmt::Display, time::Duration};
2 2
3use clap::{Parser, Command, CommandFactory, Subcommand}; 3use crate::config::Config;
4use clap_complete::{generate, Shell, Generator}; 4use clap::{Command, CommandFactory, Parser, Subcommand};
5use config::SETTINGS; 5use clap_complete::{generate, Generator, Shell};
6use error::CliError; 6use error::CliError;
7use indicatif::{ProgressBar, ProgressStyle, MultiProgress}; 7use indicatif::{MultiProgress, ProgressBar, ProgressStyle};
8use requests::{start::start, device}; 8use requests::{device, start::start};
9use reqwest::header::{HeaderMap, HeaderValue}; 9use reqwest::header::{HeaderMap, HeaderValue};
10use serde::Deserialize; 10use serde::Deserialize;
11 11
@@ -35,7 +35,7 @@ enum Commands {
35 /// id of the device 35 /// id of the device
36 id: String, 36 id: String,
37 #[arg(short, long)] 37 #[arg(short, long)]
38 ping: Option<bool> 38 ping: Option<bool>,
39 }, 39 },
40 Device { 40 Device {
41 #[command(subcommand)] 41 #[command(subcommand)]
@@ -52,7 +52,7 @@ enum DeviceCmd {
52 id: String, 52 id: String,
53 mac: String, 53 mac: String,
54 broadcast_addr: String, 54 broadcast_addr: String,
55 ip: String 55 ip: String,
56 }, 56 },
57 Get { 57 Get {
58 id: String, 58 id: String,
@@ -61,29 +61,39 @@ enum DeviceCmd {
61 id: String, 61 id: String,
62 mac: String, 62 mac: String,
63 broadcast_addr: String, 63 broadcast_addr: String,
64 ip: String 64 ip: String,
65 }, 65 },
66} 66}
67 67
68#[tokio::main] 68#[tokio::main]
69async fn main() -> Result<(), CliError> { 69async fn main() -> Result<(), CliError> {
70 let config = Config::load().map_err(CliError::Config)?;
71
70 let cli = Args::parse(); 72 let cli = Args::parse();
71 73
72 match cli.commands { 74 match cli.commands {
73 Commands::Start { id, ping } => { 75 Commands::Start { id, ping } => {
74 start(id, ping.unwrap_or(true)).await?; 76 start(&config, id, ping.unwrap_or(true)).await?;
75 }, 77 }
76 Commands::Device { devicecmd } => { 78 Commands::Device { devicecmd } => match devicecmd {
77 match devicecmd { 79 DeviceCmd::Add {
78 DeviceCmd::Add { id, mac, broadcast_addr, ip } => { 80 id,
79 device::put(id, mac, broadcast_addr, ip).await?; 81 mac,
80 }, 82 broadcast_addr,
81 DeviceCmd::Get { id } => { 83 ip,
82 device::get(id).await?; 84 } => {
83 }, 85 device::put(&config, id, mac, broadcast_addr, ip).await?;
84 DeviceCmd::Edit { id, mac, broadcast_addr, ip } => { 86 }
85 device::post(id, mac, broadcast_addr, ip).await?; 87 DeviceCmd::Get { id } => {
86 }, 88 device::get(&config, id).await?;
89 }
90 DeviceCmd::Edit {
91 id,
92 mac,
93 broadcast_addr,
94 ip,
95 } => {
96 device::post(&config, id, mac, broadcast_addr, ip).await?;
87 } 97 }
88 }, 98 },
89 Commands::CliGen { id } => { 99 Commands::CliGen { id } => {
@@ -100,29 +110,26 @@ fn print_completions<G: Generator>(gen: G, cmd: &mut Command) {
100 generate(gen, cmd, cmd.get_name().to_string(), &mut std::io::stdout()); 110 generate(gen, cmd, cmd.get_name().to_string(), &mut std::io::stdout());
101} 111}
102 112
103fn default_headers() -> Result<HeaderMap, CliError> { 113fn default_headers(config: &Config) -> Result<HeaderMap, CliError> {
104 let mut map = HeaderMap::new(); 114 let mut map = HeaderMap::new();
105 map.append("Accept-Content", HeaderValue::from_str("application/json").unwrap()); 115 map.append(
106 map.append("Content-Type", HeaderValue::from_str("application/json").unwrap()); 116 "Accept-Content",
117 HeaderValue::from_str("application/json").unwrap(),
118 );
119 map.append(
120 "Content-Type",
121 HeaderValue::from_str("application/json").unwrap(),
122 );
107 map.append( 123 map.append(
108 "Authorization", 124 "Authorization",
109 HeaderValue::from_str( 125 HeaderValue::from_str(&config.apikey).unwrap(),
110 SETTINGS.get_string("key")
111 .map_err(CliError::Config)?
112 .as_str()
113 ).unwrap()
114 ); 126 );
115 127
116 Ok(map) 128 Ok(map)
117} 129}
118 130
119fn format_url(path: &str, protocol: Protocols) -> Result<String, CliError> { 131fn format_url(config: &Config, path: &str, protocol: Protocols) -> Result<String, CliError> {
120 Ok(format!( 132 Ok(format!("{}://{}/{}", protocol, config.server, path))
121 "{}://{}/{}",
122 protocol,
123 SETTINGS.get_string("server").map_err(CliError::Config)?,
124 path
125 ))
126} 133}
127 134
128fn add_pb(mp: &MultiProgress, template: &str, message: String) -> ProgressBar { 135fn add_pb(mp: &MultiProgress, template: &str, message: String) -> ProgressBar {
@@ -137,7 +144,6 @@ fn add_pb(mp: &MultiProgress, template: &str, message: String) -> ProgressBar {
137fn finish_pb(pb: ProgressBar, message: String, template: &str) { 144fn finish_pb(pb: ProgressBar, message: String, template: &str) {
138 pb.set_style(ProgressStyle::with_template(template).unwrap()); 145 pb.set_style(ProgressStyle::with_template(template).unwrap());
139 pb.finish_with_message(message); 146 pb.finish_with_message(message);
140
141} 147}
142 148
143enum Protocols { 149enum Protocols {
@@ -149,12 +155,12 @@ impl Display for Protocols {
149 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { 155 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
150 match self { 156 match self {
151 Self::Http => f.write_str("http"), 157 Self::Http => f.write_str("http"),
152 Self::Websocket => f.write_str("ws") 158 Self::Websocket => f.write_str("ws"),
153 } 159 }
154 } 160 }
155} 161}
156 162
157#[derive(Debug, Deserialize)] 163#[derive(Debug, Deserialize)]
158struct ErrorResponse { 164struct ErrorResponse {
159 error: String 165 error: String,
160} 166}