curl implementation
This commit is contained in:
parent
6ca98da28b
commit
c42d550acf
59
src/curl.rs
59
src/curl.rs
@ -1,11 +1,58 @@
|
|||||||
|
use std::io::Read;
|
||||||
use std::string::String;
|
use std::string::String;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use curl::easy::List;
|
use curl::easy::{Easy, List};
|
||||||
|
|
||||||
|
pub fn request(auth: HashMap<String, String>) -> u32 {
|
||||||
|
let url = auth.get("ha_url").expect("[ERROR] Failed to read the URL").as_str();
|
||||||
|
|
||||||
|
// escape character for { is {{ and for } is }}
|
||||||
|
let entity_id = auth.get("light_entity_id").expect("[ERROR] Failed to read the entity id").as_str();
|
||||||
|
let body = format!("{{\"entity_id\": {entity_id}}}");
|
||||||
|
let mut data = body.as_bytes();
|
||||||
|
|
||||||
|
let token = auth.get("access_token").expect("[ERROR] Failed to read the token").as_str();
|
||||||
|
let auth = format!("Authorization: Bearer {}", &token[1..token.len()-1]);
|
||||||
|
|
||||||
pub fn curl_request(auth: HashMap<String, String>) {
|
|
||||||
// add token
|
|
||||||
let token: String = String::from("Authorization: Bearer ");
|
|
||||||
let mut list = List::new();
|
let mut list = List::new();
|
||||||
// fixme
|
list.append(&auth).unwrap();
|
||||||
list.append(token.as_str()).unwrap();
|
list.append("Content-Type: application/json").unwrap();
|
||||||
|
|
||||||
|
let mut request = Easy::new();
|
||||||
|
// proper error handling
|
||||||
|
|
||||||
|
request.url(&url[1..url.len()-1]).unwrap_or_else(|e| {
|
||||||
|
panic!("[ERROR] Failed to set the URL for the CURL request:\n{e}");
|
||||||
|
});
|
||||||
|
|
||||||
|
request.post(true).unwrap_or_else(|e| {
|
||||||
|
panic!("[ERROR] Failed to set the CURL request as POST:\n{e}");
|
||||||
|
});
|
||||||
|
|
||||||
|
request.http_headers(list).unwrap_or_else(|e| {
|
||||||
|
panic!("[ERROR] Failed to apply HTTP headers:\n{e}");
|
||||||
|
});
|
||||||
|
request.post_field_size(data.len() as u64).unwrap_or_else(|e| {
|
||||||
|
panic!("[ERROR] Failed to set the POST field size for CURL request:\n{e}");
|
||||||
|
});
|
||||||
|
|
||||||
|
let mut transfer = request.transfer();
|
||||||
|
|
||||||
|
transfer.read_function(|buf| {
|
||||||
|
Ok(data.read(buf).unwrap_or(0))
|
||||||
|
}).unwrap_or_else(|e| {
|
||||||
|
panic!("[ERROR] Failed to read the data:\n{e}");
|
||||||
|
});
|
||||||
|
|
||||||
|
transfer.perform().unwrap_or_else(|e| {
|
||||||
|
panic!("[ERROR] Failed to perform the CURL request:\n{e}");
|
||||||
|
});
|
||||||
|
|
||||||
|
// drop transfer so we can access request.response_code below
|
||||||
|
drop(transfer);
|
||||||
|
|
||||||
|
match request.response_code() {
|
||||||
|
Ok(t) => t,
|
||||||
|
Err(e) => panic!("[ERROR] Failed to retrieve the response code:\n{e}"),
|
||||||
|
}
|
||||||
}
|
}
|
@ -31,7 +31,7 @@ pub fn get_json(path: &Path) -> HashMap<String, String> {
|
|||||||
|
|
||||||
fn read_file(path: &Path) -> String {
|
fn read_file(path: &Path) -> String {
|
||||||
let read_result = File::open(path);
|
let read_result = File::open(path);
|
||||||
let mut result= String::new();
|
let mut result = String::new();
|
||||||
|
|
||||||
match read_result {
|
match read_result {
|
||||||
Ok(mut t) => {
|
Ok(mut t) => {
|
||||||
@ -45,7 +45,7 @@ fn read_file(path: &Path) -> String {
|
|||||||
},
|
},
|
||||||
Err(err) => match err.kind() {
|
Err(err) => match err.kind() {
|
||||||
ErrorKind::NotFound => {
|
ErrorKind::NotFound => {
|
||||||
println!("[ERROR] The file '{}' does not exist", path.display());
|
eprintln!("[ERROR] The file '{}' does not exist", path.display());
|
||||||
exit(1);
|
exit(1);
|
||||||
},
|
},
|
||||||
_ => panic!("[ERROR] Unexpected error, closing ..."),
|
_ => panic!("[ERROR] Unexpected error, closing ..."),
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
mod json;
|
mod json;
|
||||||
mod curl;
|
mod curl;
|
||||||
|
mod serial;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let data_file = Path::new("data.json");
|
let data_file = Path::new("data.json");
|
||||||
@ -8,6 +9,7 @@ fn main() {
|
|||||||
// some loop for getting data from arduino
|
// some loop for getting data from arduino
|
||||||
|
|
||||||
// send curl request
|
// send curl request
|
||||||
let res = curl::curl_request(data);
|
let res = curl::request(data);
|
||||||
|
println!("Response code: {res}\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
3
src/serial.rs
Normal file
3
src/serial.rs
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
fn get_port() {}
|
||||||
|
|
||||||
|
fn read_messages() {}
|
Loading…
x
Reference in New Issue
Block a user